class Person:def __init__(self, first_name):self._first_name = first_name# Getter function@propertydef first_name(self):return self._first_name# Setter function@first_name.setterdef first_name(self, value):if not isinstance(value, str): # 判断value的类型是否是strraise TypeError('Expected a string')self._first_name = value# Deleter function (optional)@first_name.deleterdef first_name(self):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 方法。例如:
