一文轻松搞定Python装饰器@property

文章讨论了Python中装饰器的概念,特别是@property的使用。通过示例展示了如何利用@property来防止类的属性被随意修改,从而增强代码的安全性,以及如何将函数封装成属性进行访问。同时,提到了在Java中类似的概念——私有变量。应用@property可以避免直接修改关键属性导致的潜在错误。
摘要由CSDN通过智能技术生成

背景

装饰器(Decorators),是一种可用于修改其它函数功能的函数,有助于使Python代码更加简短。

给出如下一个Python类的示例:

class CVHub(object):
    def __init__(self):
        self.age = 0
        self.member = 5


cvhub = CVHub()
print(f"cvhub.age={cvhub.age}")
print(f"cvhub.member={cvhub.member}")

通过实例化类,同时访问类中的两个成员变量,得到了以下输出:

cvhub.age=0

cvhub.member=5

乍看之下,貌似也没毛病。但是,当我们对__init__中定义的属性进行更改后,会发生什么情况呢?

cvhub.age = 1
cvhub.member = 500

print(f"cvhub.age={cvhub.age}")
print(f"cvhub.member={cvhub.member}")

此时,得到的输出会变成这个样子:

cvhub.age=1

cvhub.member=500

Terrible! 想象一下,如果系统中所涉及到一些关键的属性被完全的暴露出来,当所有开发人员都知道了相应属性名时,岂不是可以任意的修改?当然也不是每个程序员小哥哥都这么坏,但只要是人就难免会有出错的时候,比如不小心加多了一个小数点" . ",这对实际生产环境有时候是非常致命的。那么,我们有没有什么办法可以给这些重要的不想被开发人员修改的属性加一层”锁“呢(类似Java中设置成Private私有成员变量)?答案就在 @property .

功能

Python中的@property修饰符有两大功能:

  • 防止关键属性被任意修改
  • 将函数进一步封装,使函数(方法)像属性一样被访问
class CVHub(object):
    def __init__(self):
        self._age = 0
        self._member = 5

    @property
    def age(self):
        return self._age

    @property
    def member(self):
        return self._member


cvhub = CVHub()
print(cvhub.age)  # Output >> 0

同上,当我们将两个方法封装上一层装饰器@property时,可以以访问属性的方式来调用方法,同时还能够防止属性被任意修改。比如,此时如果我们尝试修改属性cvhub.age = 1,系统将会报错:

Traceback (most recent call last):
  File "E:/***/test.py", line *, in <module>
    cvhub.age = 1
AttributeError: can't set attribute
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CVHub

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值