Python classMethod記述子


通常、クラスのメソッドを使用する場合は、クラスを1つのオブジェクトに実体化し、オブジェクトの使用方法を呼び出すしかありません.
例:
   
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であることがわかり,インスタンスとは無関係であることが証明された.