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

self.__score与setattr(self, '__score', score)的差别

请问为什么用 self.__score = score __score不能被外部访问但是用 setattr(self, '__score', score), __score就能被外部访问

正在回答

2 回答

你可以试试:


class Person(object):

    def __init__(self, score):

        self.__score = score

    def get_score(self):

        return self.__score


然后用

p = Person(100)

setattr(p, '__score', 88)

print p.get_score

print p.__score

print _Person__score


看看结果。


__score不能被外部访问是因为Python解释器自动把class内部的__score变成了_Person__score


也就是说,class内部的__score被实际替换成_Person__score


而setattr(p, '__score', 88)是给p加了一个__score属性,这个__score和class内部的__score不是同一个

7 回复 有任何疑惑可以回复我~
#1

慕粉1462109115

最后一行应该:print P._Person__score
2016-05-04 回复 有任何疑惑可以回复我~
#2

慕神2455362 回复 慕粉1462109115

我试了下,直接print这个也不行啊
2018-07-18 回复 有任何疑惑可以回复我~
#3

慕神2455362 回复 慕神2455362

不好意思,是可以的。我刚才输错了
2018-07-18 回复 有任何疑惑可以回复我~

也就是说“不能被外部调用”是指“不能用原来的名字被外部调用”,但是如果用p._Person__score也还是可以取到该属性值啊。

0 回复 有任何疑惑可以回复我~

举报

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

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

进入课程

self.__score与setattr(self, '__score', score)的差别

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