Protocolos en Python
Tipado estructural: cualquier cosa con los métodos correctos satisface el protocolo.
from typing import Protocol, runtime_checkable
@runtime_checkable
class ConTamano(Protocol):
def __len__(self) -> int:
...
class Tour:
def __init__(self, pasos):
self.steps = pasos
def __len__(self):
return len(self.steps)
def describir(elemento: ConTamano) -> str:
return f"{len(elemento)} elementos"
print(describir([1, 2, 3]), describir(Tour([1, 2])))
print(isinstance(Tour([]), ConTamano), isinstance(3, ConTamano))
Cómo funciona
- No se requiere herencia, solo métodos que coincidan.
runtime_checkablepermite usar isinstance contra él.- Así el duck typing recibe un nombre que el verificador entiende.
Palabras clave y builtins usados aquí
classdefintisinstancelenprintreturnselfstr
El intento, en números
- Líneas
- 23
- Caracteres a escribir
- 428
- Tokens
- 121
- Ritmo de tres estrellas
- 110 tpm
Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 66 segundos.
Paso 2 de 4 en Tipado a fondo; paso 42 de 53 en Python pythónico.