Skip to content

getter 与 setter

Getters and Setters

点号语法(dot notation)提供了一种简洁而优雅的方式来访问和修改对象的属性。

ds p489 1

然而,使用点号语法时,我们无法对属性的修改进行校验。这意味着我们可以给实例的属性赋予无效的值,如下所示:

ds p489 2

避免这种情况的一种常见做法是定义一个 setter,它会对赋值这一步进行校验。

ds p490 1

但是显式调用一个 setter 方法并不像点号语法那样优雅,对吧?理想情况下,我们既希望使用点号语法,又能应用这些校验检查。Python 中的 @property 装饰器(decorator)可以帮我们实现。下面是它的用法。

首先,按如下方式定义一个 getter:

ds p490 2

声明一个与属性同名的方法。该方法无需指定任何参数。用 @property 装饰器来修饰它。

接下来,按如下方式定义一个 setter:

ds p491 1

  • 声明一个与属性同名的方法。
  • 指定你希望用来更新该属性的参数。
  • 像在其它任何 setter 方法中那样编写校验条件。
  • 用 @attribute-name.setter 装饰器来修饰它。

现在,你就可以使用点号语法,同时仍然保留校验检查。

ds p491 2

这种做法既具备显式 setter 和 getter 的校验与控制能力,又拥有点号语法的优雅。

本站内容仅供学习交流,版权归原作者所有。