python@classmethod类装饰器_@Staticmethod、@Classmethod和@Property类装饰器

@staticmethod 与 @classmethod在Python中称为 装饰器,用来修饰函数,相当于添加一个额外的功能,不再像普通函数那样进行实例化。

@staticmethod和@classmethod

其实@staticmethod和@classmethod都是用来声明静态方法的。只不过一个声明静态方法,一个声明类方法。

静态方法:使用装饰器@staticmethod。没有self和cls参数。

类方法:使用装饰器@classmethod。第一个参数为当前类的对象,通常为cls。

为了方便大家了解两者的差别,以下的示例代码将有助于发现其中的差别:

'''

@Author:Runsen

@微信公众号:Python之王

@博客:https://blog.csdn.net/weixin_44510615

@Date:2020/8/30

'''

class A():

# 类的属性

x = 1

@classmethod

def get_name(cls, name):

print(cls.x)

print('my name is %s'%name)

@staticmethod

def get_age(age):

print(A.x)

print(f'i am %s years old'% age)

if __name__ == '__main__':

A.get_name('Runsen')

A.get_age(20)

# 实例对象同样运行

a = A()

a.get_name('Runsen')

a.get_age(20)

#输出如下

1

my nameisRunsen

1

i am 20 years old

1

my nameisRunsen

1

i am 20 years old

如果在 @staticmethod 中要调用到这个类的一些属性方法,只能直接 类名.属性名或 类名.方法名。而 @classmethod 因为持有cls参数,可以通过cls来调用类的属性,类的方法,实例化对象等,避免硬编码。

@property

@property可以将一个方法的调用变成属性调用。举例说明:平时我们调用数据属性和方法,是这样的

class School():

name="家里蹲大学"

def test(self):

print("实例方法")

@property

def test_pro(self):

print("静态属性")

if __name__ == "__main__":

s = School()

print(s.name)

s.test()

# 输出如下

家里蹲大学

实例方法

这时就要用到@preperty装饰器,该装饰器能够让一个方法变成属性调用。

class School():

name="家里蹲大学"

def test(self):

print("实例方法")

@property

def test_pro(self):

print("静态属性")

if __name__ == "__main__":

s = School()

print(s.name)

# 注意返回的函数 千万别加()

s.test_pro

# 输出如下

家里蹲大学

静态属性

从今天以后,在Python编程中,@property广泛应用在Python类的定义中非常常见。你一看到@property,第一反应就是:@property专门负责把一个方法变成同名属性的。

本文已收录 GitHub,传送门~[1] ,里面更有大厂面试完整考点,欢迎 Star。

Reference

[1]传送门~:

https://github.com/MaoliRUNsen/runsenlearnpy100

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值