Python 特性 (property) 规范 | Google 官方用法
2025-07-23 11:20 更新
特性 (properties)
(译者注:参照 fluent python。这里将 “property
” 译为“特性”,而 “attribute
” 译为属性。python 中数据的属性和处理数据的方法统称“属性(arrtibute
)”,而在不改变类接口的前提下用来修改数据属性的存取方法我们称为“特性(property
)”。)
Tip
可以用特性来读取或设置涉及简单计算、逻辑的属性。特性的实现必须和属性 (attribute
) 一样满足这些通用要求:轻量、直白、明确。
定义:
把读取、设置属性的函数包装为常规属性操作的写法。
优点:
- 可以直接实现属性的访问、赋值接口, 而不必添加获取器(
getter
)和设置器 (setter
)。 - 可以让属性变为只读。
- 可以实现惰性求值。
- 类的内部实现发生变化时,可以用这种方法让用户看到的公开接口保持不变。
缺点:
- 可能掩盖副作用,类似运算符重载(
operator overload
)。 - 子类继承时可能产生困惑。
结论:
允许使用特性。但是,和运算符重载一样,只能在必要时使用,并且要模仿常规属性的存取特点。若无法满足要求,请参考 获取器和写入器 的规则。
举个例子,一个特性不能仅仅用于获取和设置一个内部属性:因为不涉及计算,没有必要用特性(应该把该属性设为公有)。而用特性来限制属性的访问或者计算 简单 的衍生值则是正确的:这种逻辑简单明了。
应该用 @property
装饰器 (decorator)来创建特性。自行实现的特性装饰器属于威力过大的功能。
特性的继承机制难以理解。不要用特性实现子类能覆写 (override) 或扩展的计算功能。
以上内容是否对您有帮助:
更多建议: