Abstract base classes can still be handy in Python. Nello scrivere una classe base astratta in cui voglio che ogni sottoclasse di avere, per esempio, un metodo spam()
, voglio scrivere qualcosa del genere:di Python(), classi base astratte, e NotImplementedError
class Abstract(object):
def spam(self):
raise NotImplementedError
La sfida arriva anche nel voler usare super()
, e per farlo correttamente includendolo nell'intera catena di sottoclassi. In questo caso, a quanto pare devo per avvolgere ogni super
chiamata come la seguente:
class Useful(Abstract):
def spam(self):
try:
super(Useful, self).spam()
except NotImplementedError, e:
pass
print("It's okay.")
va bene per un semplice sottoclasse, ma quando si scrive una classe che ha molti metodi, il try-tranne che cosa diventa un po 'ingombrante e un po 'brutto. Esiste un modo più elegante di sottoclassi delle classi base astratte? Sto solo facendo qualcosa di sbagliato?
che rende molto poco senso. Dovresti sapere quali metodi di superclasse sono implementati (per i quali 'super 'ha senso) e quali non sono implementati perché sono astratti. Puoi leggere la fonte. –
'raise SyntaxError' è anche nella lingua. La domanda è "perché scrivere tutto quel codice quando la semplice ispezione della classe astratta può salvarti scrivendo tutto quel codice"? –
@ S.Lott Ah, capito ora. Dovresti sottometterlo come risposta, a proposito, perché lo è. – gotgenes