web-dev-qa-db-ja.com

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を上書きせずに、superのクラスメソッドを呼び出さずに呼び出すことができるようにすることは可能ですか?必要な場合にのみクラスメソッドを上書きしたいのですが。

15
yuklai

はい、継承できます。

メンバーを継承したい場合は、継承についてpython!

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

Python 2では、Baseクラスをオブジェクトから継承することをお勧めします(ただし、そうしなくても機能します)。InPython = 3デフォルトでオブジェクトから既に継承されているため、不要です(コードの下位互換性を確保しようとしている場合を除く)。

>>> class Base(object):
...     ...
20
Eric

サブクラスの基本クラスから派生する必要があります。

class Derived(Base):
    ...