Pythonで基本クラスのクラスメソッドを呼び出す 質問する

Pythonで基本クラスのクラスメソッドを呼び出す 質問する

次のコードを考えてみましょう。

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)を出力します。BaseDerived

ベストアンサー1

新しいスタイルのクラス (つまり、Python 2 では から派生したもの、または Python 3 では常に から派生したもの) を使用している場合は、次のようobjectに実行できます。super()

super(Derived, cls).do(a)

これは、派生クラスに を設定してprint cls, a、派生クラスから基本クラスのメソッド バージョン (つまり ) のコードを呼び出す方法です。cls

おすすめ記事