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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值