0

Python 標準ライブラリの第 2 章自体にあるclassmethod()組み込み関数の下で、ここで引用している 2 つのステートメントと混同されました。

クラス メソッドは、インスタンス メソッドがインスタンスを受け取るのと同様に、暗黙的な最初の引数としてクラスを受け取ります。

わかりました、この部分までは、classmethoda がクラスに固有であることを十分に理解していたので、selfそのクラスのインスタンスを表す暗黙の引数として受け取る代わりにcls、クラス自体を表す を使用し、それclassmethodをクラス..

さて、これは私を混乱させたこのトピックの後半の別の声明です: -

派生クラスに対してクラス メソッドが呼び出される場合、派生クラス オブジェクトは暗黙の最初の引数として渡されます。

さて、それはどういう意味ですか?この状況で使用すると、実際an objectに aに渡されると言いたいのですか? classmethodしかし、これは最初のステートメント自体と矛盾しませんか。

これらの 2 つのステートメントが互いに矛盾することなくどのように密接に関係しているのか、誰かが私に理解してもらえますか??

私はいくつかのリソースを見つけようとしましたがexamplesecond case..

4

2 に答える 2

4

クラスは、そのクラスのインスタンスと同じように (明らかに同じオブジェクトではありませんが)、完全な機能を備えたファーストクラスのオブジェクトです。classmethodの が最初の引数として「クラス オブジェクト」を受け取ると言うとき、真class Cであるオブジェクトではなく、a を表すオブジェクトを受け取ると言いisinstance(<the object>, C)ます。後者は (クラス)インスタンスと呼ばれ、「クラス オブジェクト」はクラスであるオブジェクト用に予約されています

2 番目の文は、クラス メソッドが派生クラスで呼び出された場合、クラス メソッドはその派生クラス (別名「派生クラス オブジェクト」) を受け取り、ポリモーフィックな動作を可能にすることを明確にしています。例(Python 3、f..k古いスタイルのクラスのため):

class C:
    x = 1

    @classmethod
    def m(cls):
        return cls.x

class D(C):
    x = 2

print(C.m()) # 1
print(D.m()) # 2
于 2012-10-09T08:46:03.390 に答える