Python classMethod描述符

     通常情况下,如果我们要使用一个类的方法,那我们只能将一个类实体化成一个对象,进而调用对象使用方法。

     比如:

   

class C(object):
    def boo(self):
        print "boo";
    @classmethod
    def foo(cls):
        print "foo";
c=C();
c.boo();
C.foo();

 

 

  第一个函数为普通的类方法,需要传入一个self,即类实例来调用,而第二个方法为一个独立于类结构的方法。

  注意:@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,证明了它跟实例无关

你可能感兴趣的:(数据结构,C++,c,python,C#)