【一文看懂】@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