2012-06-07 13 views
10

Na przykład, mam klasę bazową i klasę pochodną:Czy python @ classmethod może być dziedziczony?

>>> 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' 

Czy to możliwe, aby mieć pochodny klasa móc wywołać myClassMethod bez zastępowania go i wywołanie metody Super swojej klasie? Chciałbym zastąpić metodę klasy tylko wtedy, gdy jest to konieczne.

+6

Twój 'klasa Derived' nie pochodzi od' Base'. W przeciwnym razie to by działało. –

Odpowiedz

17

Tak, mogą być dziedziczone.

Jeśli chcesz dziedziczyć członków, musisz powiedzieć Pythonowi o dziedziczeniu!

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

Jest to dobra praktyka, aby dokonać Base klasy Dziedziczy z obiektu (ale to będzie działać bez robisz tak):

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

To jest tylko dobra praktyka w python 2.x - w 3.x jest zbędna, ponieważ wszystko dziedziczy z 'obiektu'. – James

+5

@ James: prawda, ale większość pytań na temat SO nadal trwa około 2.7 – Eric

+1

Co jeśli po kilku latach przestanie tak być? – Daerdemandt

3

Musisz określić klasę bazową w podklasy:

class Derived(Base): 
    ... 
Powiązane problemy