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
发布了28 篇原创文章 · 获赞 6 · 访问量 2268

猜你喜欢

转载自blog.csdn.net/Jeff888999/article/details/104138052