python3 classmethod_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();

输出:

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这个参加,是当前类啊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值