、staticmethod
s「は単なる機能」であり、私は2つの異なる方法でそれらを参照することができますPython classmethods:インスタンスのメンバとクラスのメンバの違いは何ですか? Pythonでは
>>> class A:
... @staticmethod
... def f():
... pass
...
>>> a=A()
>>> A.f
<function A.f at 0x7f20f8cd3f28>
>>> a.f
<function A.f at 0x7f20f8cd3f28>
>>> a.f is A.f
True
a.f
とA.f
の両方がちょうど」であることを起こる同じオブジェクトを参照名、あります機能"。すばらしいです。
>>> class B:
... @classmethod
... def f(cls):
... pass
...
>>> b=B()
>>> b.f is B.f
False
私はb.f
とB.f
がないの機能があることを知っている:彼らはバインドmothodsだ
は今、classmethod
私が持っていると言います。これは、cls
引数が暗黙的であり、常にB
に等しいことを意味します。このため、B2
がB
のサブクラスである場合、異なるcls
引数を持つバインドされたメソッドであるため、B2().f is B().f
はfalseになります。しかし、私はなぜB().f is B.f
がFalse
をもたらすのか分からない。 A().f
とA.f
のように、同じオブジェクトではありませんか?
EDIT:この質問は「What is the difference between @staticmethod and @classmethod in Python?」と同じではありません。私はstaticmethod
とclassmethod
の違いを知っています。私はリンクされている "傘"の質問には取り上げられていない1つの特定のことを知りたい。
クラスは定義に似ています。 'インスタンス 'はその定義の実際の使用です。したがって、 'class'はレシピ、' instance'はケーキです。レシピはケーキではなく、ケーキの作り方に関する説明だけなので、同じではありません。 – DuckPuncher
@DuckPuncherあなたは私の質問の本文を読みましたか? B().fがB.fである理由が偽であり、A().fがA.f'が真である理由を知りたい。 – fonini
「ユーザー定義メソッド」も参照してください。https://docs.python.org/2/reference/datamodel.html#types –