Python classMethod記述子
通常、クラスのメソッドを使用する場合は、クラスを1つのオブジェクトに実体化し、オブジェクトの使用方法を呼び出すしかありません.
例:
最初の関数は通常のクラスメソッドであり、self、すなわちクラスインスタンスを呼び出し、2番目のメソッドはクラス構造から独立したメソッドである.
注意:@classmethodは、クラス自体のデータ構造に関係なく単独の関数にのみ適用されます.実際には、通常の関数を使用するのと同じで、パラメータにselfを加えることもできません.クラスのデータ構造を使用するには、クラスをインスタンス化する必要があります.注意して使用してください.
さらにfoo()関数が何を伝えているのかを見てみましょう.少し改造します.
これによりfoo関数に伝達されるのはインスタンスcではなくクラスCであることがわかり,インスタンスとは無関係であることが証明された.
例:
class C(object):
def boo(self):
print "boo";
@classmethod
def foo(cls):
print "foo";
c=C();
c.boo();
C.foo();
最初の関数は通常のクラスメソッドであり、self、すなわちクラスインスタンスを呼び出し、2番目のメソッドはクラス構造から独立したメソッドである.
注意:@classmethodは、クラス自体のデータ構造に関係なく単独の関数にのみ適用されます.実際には、通常の関数を使用するのと同じで、パラメータにselfを加えることもできません.クラスのデータ構造を使用するには、クラスをインスタンス化する必要があります.注意して使用してください.
さらにfoo()関数が何を伝えているのかを見てみましょう.少し改造します.
class C(object):
def boo(self):
print "boo";
@classmethod
def foo(cls):
print cls;
print "foo";
c=C();
print c;
print C;
#c.boo();
C.foo();
:
<__main__.C object at 0x00C468D0>
<class '__main__.C'>
<class '__main__.C'>
foo
これによりfoo関数に伝達されるのはインスタンスcではなくクラスCであることがわかり,インスタンスとは無関係であることが証明された.