1. class Person:
  2. def __init__(self, first_name):
  3. self._first_name = first_name
  4. # Getter function
  5. @property
  6. def first_name(self):
  7. return self._first_name
  8. # Setter function
  9. @first_name.setter
  10. def first_name(self, value):
  11. if not isinstance(value, str): # 判断value的类型是否是str
  12. raise TypeError('Expected a string')
  13. self._first_name = value
  14. # Deleter function (optional)
  15. @first_name.deleter
  16. def first_name(self):
  17. raise AttributeError("Can't delete attribute")

上述代码中有三个相关联的方法,这三个方法的名字都必须一样。 第一个方法是一个 getter 函数,它使得 first_name 成为一个属性。 其他两个方法给 first_name 属性添加了 setter 和 deleter 函数。 需要强调的是只有在 first_name 属性被创建后, 后面的两个装饰器 @first_name.setter 和 @first_name.deleter 才能被定义。
property的一个关键特征是它看上去跟普通的attribute没什么两样, 但是访问它的时候会自动触发 getter 、setter 和 deleter 方法。例如:

应用:设置条件才能赋值