Python 特性 (property) 规范 | Google 官方用法

2025-07-23 11:20 更新

特性 (properties)

(译者注:参照 fluent python。这里将 “property” 译为“特性”,而 “attribute” 译为属性。python 中数据的属性和处理数据的方法统称“属性(arrtibute)”,而在不改变类接口的前提下用来修改数据属性的存取方法我们称为“特性property)”。)

Tip

可以用特性来读取或设置涉及简单计算、逻辑的属性。特性的实现必须和属性 (attribute) 一样满足这些通用要求:轻量、直白、明确。

定义:

把读取、设置属性的函数包装为常规属性操作的写法。

优点:

  1. 可以直接实现属性的访问、赋值接口, 而不必添加获取器getter)和设置器setter)。
  2. 可以让属性变为只读。
  3. 可以实现惰性求值。
  4. 类的内部实现发生变化时,可以用这种方法让用户看到的公开接口保持不变。

缺点:

  1. 可能掩盖副作用,类似运算符重载operator overload)。
  2. 子类继承时可能产生困惑。

结论:

允许使用特性。但是,和运算符重载一样,只能在必要时使用,并且要模仿常规属性的存取特点。若无法满足要求,请参考 获取器和写入器 的规则。  举个例子,一个特性不能仅仅用于获取和设置一个内部属性:因为不涉及计算,没有必要用特性(应该把该属性设为公有)。而用特性来限制属性的访问或者计算 简单 的衍生值则是正确的:这种逻辑简单明了。
应该用 @property 装饰器 (decorator)来创建特性。自行实现的特性装饰器属于威力过大的功能。
特性的继承机制难以理解。不要用特性实现子类能覆写 (override) 或扩展的计算功能。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号