Python 入门 20 —— 类的类方法、 classmethod()

一、类的类方法

被 @classmethod 装饰过的方法,被称为类的类方法。类方法与类的普通方法的不同之处在于:调用类方法时,系统将类本身作为实参赋给类方法的第一形参;而调用类的普通方法时,系统是将类对象本身作为实参赋给类的普通方法的第一形参。简单地说就是,类方法的第一个参数将是类本身,普通方法的第一个参数将是对象本身。

因为类方法能够接受到类本身,所以,用“类名.类方法()”的形式来操作类的数据成员和方法就特别地方便。例如:

class c01:
    a =100

    @classmethod
    def fun01(cls,x):return cls.a + x

    def fun02(self,x):return c01.a + x

print(c01.fun01(6))    # 106
print(c01.fun02(0,6))    # 106

在上例的普通方法fun02()中,通过“类名.数据成员名”的方式也能访问到类的数据成员,但比起在类方法fun01()使用的方式,显然要麻烦得多。另外,“类名.数据成员名”这种硬编码的方式,在类名修改时,要就随之修改,很容易出错。实际上,类的类方法机制,就是为了方便用“类名”的方式来引用和操作类的数据成员和方法。

二、通过类的类方法中创建对象

在类的类方法中创建对象并返回,可以让创建对象变成更灵活。例如:

class c02:
    def __init__(self,x):self.a=x

    @classmethod
    def fun01(cls,x):
        if(x<10):return cls(x*10)
        else:return cls(x)

obj01=c02(8)
obj02=c02.fun01(8)
obj03=c02.fun01(18)

print(obj01.a)    # 8
print(obj02.a)    # 80
print(obj03.a)    # 18
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值