次のコードを考えてみましょう。
class Base(object):
@classmethod
def do(cls, a):
print cls, a
class Derived(Base):
@classmethod
def do(cls, a):
print 'In derived!'
# Base.do(cls, a) -- can't pass `cls`
Base.do(a)
if __name__ == '__main__':
d = Derived()
d.do('hello')
> $ python play.py
> In derived!
> <class '__main__.Base'> msg
からDerived.do
、どうやって電話すればいいですかBase.do
?
通常のオブジェクト メソッドの場合は、通常は または基本クラス名を直接使用しますsuper
が、どうやら基本クラスでクラス メソッドを呼び出す方法が見つからないようです。
上記の例では、 classの代わりに classBase.do(a)
を出力します。Base
Derived
ベストアンサー1
新しいスタイルのクラス (つまり、Python 2 では から派生したもの、または Python 3 では常に から派生したもの) を使用している場合は、次のようobject
に実行できます。super()
super(Derived, cls).do(a)
これは、派生クラスに を設定してprint cls, a
、派生クラスから基本クラスのメソッド バージョン (つまり ) のコードを呼び出す方法です。cls