Ho letto docs pitone sulle classi base astratte:pitone @abstractmethod decoratore
Da here:
abc.abstractmethod(function)
Un decoratore che indica metodi astratti.L'utilizzo di questo decoratore richiede che il metaclass della classe sia
ABCMeta
o . Una classe che ha un metaclasse derivato daABCMeta
non può essere istanziata a meno che tutti i suoi metodi astratti e le proprietà non vengano sovrascritte.
E here
è possibile applicare il
@abstractmethod
decoratore a metodi come draw() che deve essere implementata; Python genererà quindi un'eccezione per le classi che non definiscono il metodo. Si noti che l'eccezione è solo generata quando si tenta effettivamente di creare un'istanza di una sottoclasse priva del metodo.
Ho usato questo codice per verificare che fuori:
import abc
class AbstractClass(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def abstractMethod(self):
return
class ConcreteClass(AbstractClass):
def __init__(self):
self.me = "me"
c = ConcreteClass()
c.abstractMethod()
Il codice va bene, quindi non capisco. Se scriv c.abstractMethod
ottengo:
<bound method ConcreteClass.abstractMethod of <__main__.ConcreteClass object at 0x7f694da1c3d0>>
Quello che mi manca qui? ConcreteClass
deve implementare i metodi astratti, ma non ottengo eccezione.
Quale Python? Segnala l'errore bene per me. Inoltre, puoi sempre sollevare NotImplementedError invece di usare 'abc'. –
Inserisco un commento sulla risposta mouad, il collegamento da 'python' è stato impostato come predefinito in' python3'. Ti ricorderò di sollevare l'eccezione, poiché scrivere codice portatile con le modifiche su Python sembra molto lontano dalla mia conoscenza di Python. – Sebastian