Python类私有属性应使用_还是__作为前缀?
Python类私有属性前缀的通用约定
首选方案是单下划线_开头,这是Python社区一致认可的内部属性标记方式,具体原因如下:
- 这是PEP8明确规定的命名规范:单下划线前缀的类成员/模块成员,代表该成员属于内部实现细节,对外不保证兼容性,不应该被外部直接调用。所有主流Python开源项目都遵循这一约定,其他Python开发者看到
_开头的属性,自然就知道这是类的私有属性,不会随意访问。 - 双下划线
__开头的命名有专门的设计用途,并非用来标记私有属性。Python会对__开头的属性做名称修饰(name mangling),自动将其重命名为_类名__属性名,这一机制的核心作用是避免父类和子类的同名属性产生冲突,而非对外提示私有性。如果用它来标记私有属性,属于对该机制的误用,反而会带来不必要的麻烦:比如子类访问同名属性时会出现意料之外的问题,调试时也需要额外处理重命名后的属性名。
举个简单的示例:
class User: def __init__(self, name, password_hash): self.name = name # 公共属性,对外可访问 self._password_hash = password_hash # 内部私有属性,约定外部不要直接读写 self.__secret_salt = "xxx" # 名称修饰属性,用来避免子类覆盖该属性
Python本身的设计哲学就是“约定大于强制”,不管是_还是__都不能真正阻止外部访问,单下划线的标记方式已经足够明确传递“私有属性,请勿随意访问”的信号,完全满足需求。
内容的提问来源于stack exchange,提问作者Eladtopaz
相关产品推荐
相关产品推荐

