en Python 2.x cuando se quiere marcar un método tan abstracto, se puede definir así:Equivalente de NotImplementedError para los campos en Python
class Base:
def foo(self):
raise NotImplementedError("Subclasses should implement this!")
Entonces, si usted se olvida de anularlo, se obtiene una buena excepción recordatorio. ¿Hay una manera equivalente de marcar un campo como abstracto? ¿O lo está diciendo en la clase docstring todo lo que puede hacer?
Al principio pensé que podía configurar el campo para NotImplemented, pero cuando busqué su significado (comparaciones enriquecidas), me pareció abusivo.
Todavía funciona, incluso si su intención original era realizar comparaciones enriquecedoras. ¿Qué pasa con eso? –
El primer problema es que puedes leer el campo desde el objeto (myvar = Base.field) y lo siguiente que sabes es que NotImplementeds está por todas partes hasta que otra parte intente usarlo y obtenga un AttributeError misterioso. – Kiv
El segundo problema es que IMO dificulta la legibilidad ("¿Qué hace esa cosa de comparación rica haciendo allí? ¿Perdí algo?) La solución de Evan expresa exactamente lo que está sucediendo de una manera familiar. – Kiv