Python 类的 property 属性详解

在之前的学习中,对象的属性,我们都是通过把变量值赋值给对象本身来实现的。

>>> class Student:pass
...
>>>
>>> s = Student()
>>> s.name = "王炳明"
>>> s.age = 27

直接赋值会存在一个问题,就是无法对属性值进行合法性较验,比如我给 age 赋值的是负数,在业务上这种数据是不合法的。但上面那种写法是无法检查出来的。

>>> s.age = -27
>>> s.age
-27

为了实现属性的合法性校验,Python 引入的 property 属性。

请看下面这段代码

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

    @age.setter
    def age(self, value):
        if 0 <= value <= 150:
            self._age = value
        else:
            raise ValueError("Valid value must be in [0, 150]")

此时再对 age 属性进行赋值就会对 value 的值进行合法性检查,小于 0 或者 大于 150 的都是不合法数据。

>>> s = Student()
>>> s.age = -27
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 10, in age
ValueError: Valid value must be in [0, 150]

由此我们知道了 property ,其实是 Python 中一个内置的装饰器,它可以在新式类中把一个函数 改造 成属性。

教程来源于Github,感谢iswbm大佬的无私奉献,致敬!

技术教程推荐

算法面试通关40讲 -〔覃超〕

数据分析实战45讲 -〔陈旸〕

Go语言从入门到实战 -〔蔡超〕

安全攻防技能30讲 -〔何为舟〕

微信小程序全栈开发实战 -〔李艺〕

张汉东的Rust实战课 -〔张汉东〕

Spring编程常见错误50例 -〔傅健〕

深入C语言和程序运行原理 -〔于航〕

遗留系统现代化实战 -〔姚琪琳〕