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
白又白乖宝宝
发布了21 篇原创文章 · 获赞 0 · 访问量 762
私信
关注
标签:20,Python,classmethod,def,fun01,c01,方法,类名 来源: https://blog.csdn.net/Jeff888999/article/details/104138052