我对python还是很陌生,只是想了解面向对象编程在其中的工作方式。我已经读到,在变量前面使用双_(下划线)表示无法在类外部更改其值。为了测试它,我尝试运行以下代码段。
class a:
def set_value(self,x):
self.__x = x
def get_value(self):
return self.__x
a_obj = a()
a_obj.set_value(10)
a_obj.__x = 1
print a_obj.__x
print a_obj.get_value()
输出结果为
1
10
我不了解这种行为。当我检查两个变量的ID时,它会有所不同。我知道有一个名称修饰的概念,但是我不完全了解自己在做什么。
答案 0 :(得分:0)
看看https://en.wikipedia.org/wiki/Name_mangling#Python
当您在类之外分配__x时,您没有更改现有的类变量,而是创建了一个新变量。当您创建一个新的实际上是__x
时,现有的被改成_a__x尝试将其添加到代码末尾:
print a_obj._a__x