通常情况下,如果我们要使用一个类的方法,那我们只能将一个类实体化成一个对象,进而调用对象使用方法。
比如:
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();
输出:
foo
由此可以看出foo函数里传入的的确是类C,而非实例c,证明了它跟实例无关
分享到:
2011-05-18 14:17
浏览 2576
评论
3 楼
dengwei729
2012-06-27
嗯, 确实,受教了
2 楼
bestchenwu
2012-06-26
dengwei729 写道
不能说没有关系啊,classmethod有需要cls这个参加,是当前类啊
哥们,您误会了类和类实例的区别,就好比JAVA类和JAVA类对象的区别。
1 楼
dengwei729
2012-06-26
不能说没有关系啊,classmethod有需要cls这个参加,是当前类啊