Abstract base classes can still be handy in Python. Al escribir una clase base abstracta donde quiero que cada subclase que tiene, por ejemplo, un método spam()
, quiero escribir algo como esto:de Python(), las clases base abstractas y NotImplementedError
class Abstract(object):
def spam(self):
raise NotImplementedError
El desafío también es querer usar super()
, y hacerlo correctamente incluyéndolo en toda la cadena de subclases. En este caso, parece que tengo para envolver cada super
llamada como la siguiente:
class Useful(Abstract):
def spam(self):
try:
super(Useful, self).spam()
except NotImplementedError, e:
pass
print("It's okay.")
Eso está bien para un simple subclase, pero cuando se escribe una clase que tiene muchos métodos, el try-excepto que se hace un poco engorroso y un poco feo ¿Hay una manera más elegante de crear subclases a partir de clases base abstractas? ¿Lo estoy haciendo mal?
Eso tiene muy poco sentido. Debes saber qué métodos de superclase están implementados (para lo cual 'super' tiene sentido) y cuáles no se implementan porque son abstractos. Puedes leer la fuente. –
'raise SyntaxError' también está en el idioma. La pregunta es "¿por qué escribir todo ese código cuando la simple inspección de la clase abstracta puede salvarlo escribiendo todo ese código"? –
@ S.Lott Ah, entendido ahora. Debería enviar eso como respuesta, por cierto, porque así es. – gotgenes