在类外分配以__开头的类实例变量的值。

时间:2018-09-20 11:20:00

标签: python python-2.7 oop

我对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时,它会有所不同。我知道有一个名称修饰的概念,但是我不完全了解自己在做什么。

1 个答案:

答案 0 :(得分:0)

看看https://en.wikipedia.org/wiki/Name_mangling#Python

当您在类之外分配__x时,您没有更改现有的类变量,而是创建了一个新变量。当您创建一个新的实际上是__x

时,现有的被改成_a__x

尝试将其添加到代码末尾:

print a_obj._a__x