Python类访问器与修改器方法命名规范及公共属性使用咨询
Python类访问器、修改器相关问题解答
1. 访问器方法的命名推荐
Python社区没有强制命名规范,两种风格都有开发者使用,不过实际项目中更推荐get_owner这类蛇形命名的Java风格:
- 辨识度更高,其他开发者看到
get_xxx前缀就能立刻判断这是属性访问器,不会和普通实例方法混淆 - 避免和后续可能暴露的同名字段产生命名冲突
- 更符合多数Python开源项目的命名习惯,降低团队协作的理解成本
当然更Pythonic的实现方式是使用@property装饰器,不需要额外写独立的访问方法,示例如下:
class Account: def __init__(self, owner): self.__owner = owner self.__amount = 0 @property def owner(self): return self.__owner
这种写法外部可以直接用account.owner的方式访问,和访问公开属性的写法完全一致,更简洁自然。
2. 修改器方法的命名推荐
和访问器对应,没有额外特殊需求的前提下,优先使用set_owner这类set_xxx前缀的蛇形命名,这是Python开发者普遍接受的命名方式,学习和理解成本最低。
如果使用@property实现访问器,对应的修改器可以用@xxx.setter装饰器实现,示例如下:
class Account: def __init__(self, owner): self.__owner = owner self.__amount = 0 @property def owner(self): return self.__owner @owner.setter def owner(self, value): # 这里可以加赋值校验逻辑 if not value.strip(): raise ValueError("所有者名称不能为空") self.__owner = value
外部调用的时候直接写account.owner = "新名称"即可,不需要调用独立的set方法。
3. 公开属性是否需要配套访问器、修改器
不需要。Python的设计哲学默认遵循「我们都是成年人」的约定,公开属性默认可以直接访问、赋值,不需要提前写冗余的访问器、修改器做封装。
和Java不同的是,Python的@property机制可以做到无缝替换:如果后续你需要给某个公开属性增加访问/赋值的额外逻辑(比如参数校验、计算缓存、变更通知等),可以直接把该字段改成内部属性,加对应的property装饰器即可,外部调用的代码完全不需要修改,不存在Java里改字段封装方式就要全量改调用代码的问题。
只有当你明确知道属性的访问/赋值需要附加额外逻辑的时候,才需要写对应的访问器、修改器。
内容的提问来源于stack exchange,提问作者Kim Mens
相关产品推荐
相关产品推荐

