为了账号安全,请及时绑定邮箱和手机立即绑定

私有属性从外部访问, 请教 _Person__count 用法

>>> class Person(object):
	__count = 0
	def __init__(self, name):
            Person.__count += 1
            self.name = name
            print Person.__count
          
>>> p1 = Person('Bob')
1
>>> p2 = Person('Alice')
2
>>> p1._Person__count
2
>>> p1._Person__count = 3
>>> p1._Person__count
3
>>> p2._Person__count
2
>>> Person.__count
Error

# Person.__count 是私有类属性,但是在IDLE无意中发现自动填充了 p1._Person__count这是可以访问的,大神可以说说这里的用法吗?多了单'_' 少了'.'


正在回答

1 回答

这是Python内部机制name mangling 技术做的事情。具体表现是__specialname形式的任何标识符(前面至少两个下划线,后面至多一个下划线)会被自动替换为_classname__specialname,其中classname就是类名。这也就是你直接访问__specialname时无法访问到的原因啦,是不是很可爱

在你指出的例子中,你可以用以下代码自行验证一下,希望能帮到你

print dir(p1)
2 回复 有任何疑惑可以回复我~
#1

慕粉4083696 提问者

非常感谢~!
2016-10-08 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255665    人
  • 解答问题       2949    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

私有属性从外部访问, 请教 _Person__count 用法

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信