💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 7.7 【基础】类的 property 属性 在之前的学习中,对象的属性,我们都是通过把变量值赋值给对象本身来实现的。 ```python >>> class Student:pass ... >>> >>> s = Student() >>> s.name = "王炳明" >>> s.age = 27 ``` 直接赋值会存在一个问题,就是无法对属性值进行合法性较验,比如我给 age 赋值的是负数,在业务上这种数据是不合法的。但上面那种写法是无法检查出来的。 ```python >>> s.age = -27 >>> s.age -27 ``` 为了实现属性的合法性校验,Python 引入的 property 属性。 请看下面这段代码 ```python 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 的都是不合法数据。 ```python >>> 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 中一个内置的装饰器,它可以在新式类中把一个函数 `改造` 成属性。 - 当你读取属性值时,会进入被 `property` 装饰的函数。 - 当你对属性进行赋值时,会进入被 `@xx.setter` 装饰的函数。 - 两个装饰器,一定是 `@property` 在前面,而 `@xx.setter` 在后