【问题标题】:Assigning value of a class instance variable starting with __ outside the class.在类外以 __ 开头的类实例变量的赋值。
【发布时间】:2018-09-20 11:20:00
【问题描述】:

我对 python 很陌生,只是想了解面向对象编程是如何在其中工作的。我读过在变量前面使用双 _(下划线)表示它的值不能在类之外更改。为了测试它,我尝试运行以下 sn-p。

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 时,它会有所不同。我知道有一个名称修饰的概念,但我不完全理解我正在做的事情是否确实如此。

【问题讨论】:

    标签: python python-2.7 oop


    【解决方案1】:

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

    当您在类之外分配给 __x 时,您并没有更改现有的类变量,而是创建了一个新变量。当您创建一个真正是 __x 的新的时,现有的被损坏为 _a__x

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

    print a_obj._a__x
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-26
      • 2015-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-28
      • 2011-05-11
      • 2020-04-07
      相关资源
      最近更新 更多