Можно ли наследовать 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'
Возможно ли, чтобы класс Derived смог вызвать myClassMethod без его перезаписи и вызова метода суперкласса? Я бы хотел перезаписать метод класса только тогда, когда это необходимо.
Ответы
Ответ 1
Да, они могут быть унаследованы.
Если вы хотите наследовать членов, вам нужно сообщить python о наследовании!
>>> class Derived(Base):
... pass
Хорошая практика сделать ваш класс Base
унаследованным от объекта (но он будет работать, если вы этого не сделаете):
>>> class Base(object):
... ...
Ответ 2
Вы должны определить базовый класс в подклассе:
class Derived(Base):
...