2012-06-07 4 views
10

Per esempio, ho una classe base e una classe derivata:È possibile ereditare un python @classmethod?

>>> class Base: 
... @classmethod 
... def myClassMethod(klass): 
...  pass 
... 
>>> class Derived: 
... pass 
... 
>>> Base.myClassMethod() 
>>> Derived.myClassMethod() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: class Derived has no attribute 'myClassMethod' 

E 'possibile avere la classe derivata essere in grado di chiamare myClassMethod senza sovrascrivere esso e chiamando il metodo della classe di super-? Mi piacerebbe sovrascrivere il metodo di classe solo quando è necessario.

+6

tua classe 'Derived' non deriva da' base'. Altrimenti funzionerebbe. –

risposta

17

Sì, può essere ereditata.

Se si desidera ereditare membri, è necessario comunicare a Python l'ereditarietà!

>>> class Derived(Base): 
... pass 

E 'buona pratica per rendere il vostro erediti Base classe da oggetto (ma funzionerà senza di te farlo):

>>> class Base(object): 
...  ... 
+8

Questa è solo una buona pratica in python 2.x - in 3.x è superflua poiché tutto eredita da 'object'. – James

+5

@James: vero, ma la maggior parte delle domande su SO sono ancora circa 2.7 – Eric

+1

E se dopo diversi anni non fosse più così? – Daerdemandt

3

È necessario definire classe base nella sottoclasse:

class Derived(Base): 
    ...