self.__score与setattr(self, '__score', score)的差别
请问为什么用 self.__score = score __score不能被外部访问但是用 setattr(self, '__score', score), __score就能被外部访问
请问为什么用 self.__score = score __score不能被外部访问但是用 setattr(self, '__score', score), __score就能被外部访问
2015-03-18
你可以试试:
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不是同一个
举报