【一文看懂】@classmethod的用法

【一文看懂】@classmethod的用法

想要了解@classmethod这个装饰器的用法,首先应该知道两个概念“类本身”和“类实例”

先来看下面的代码

class A():
    shuxing = "我是类属性,可以直接被类本身调用,也也可以被类实例调用"
    def __init__(self):
		print("我是创建类实例时自动调用的")
		
    def func1(self):
		print("我是普通的类函数,需要用类实例调用")
		
    @classmethod
    def func2(cls):
		print("我可以直接被类本身调用")

什么是类本身? 就是这个类名A
什么是类实例? 就是使用这个类创建的对象 a = A() 中的a,也可以不用变量a来接, A()就是类实例
其实可以看出 类本身和类实例的区别,就是有无 ()。

A.func1() —>
错的,因为类本身不能调用没被@classmethod装饰的普通类函数(也可以叫做类方法) 只能A().func1()来调用
A.func2() —>
对的,因为被@classmethod装饰的函数,可以直接被类本身调用

理解了上面的吗?理解的话继续往下看,看看如果需要传参的话该怎么写:

class A():
    shuxing = "我是类属性"
    def __init__(self,name):
        self.name=name
        
    def p_name(self):
        print(self.name)
        
    def p_age(self):
        print(18)

    @classmethod
    def class_print(cls):
        print("i am class_use")
        
    @classmethod
    def class_user(cls, name):
        print("no")
        cls(name).p_name()

来看看不同调用的打印结果

a = A(“yang”) —> 创建类实例
a.p_name() —> yang
a.p_age() —> 18
A.shuxing —> print之后显示:我是类属性(类属性可以直接被类本身所调用)
A.class_print() —> 类本身直接调用 —> i am class_use
A.class_user(“zhuzhu”) —> 类本身直接调用且传参 —> zhuzhu


版权声明:本文为weixin_43661701原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。