python - 访问私有(private)类变量

标签 python class python-2.7 properties scope

在学习 Python 时,我遇到了这种奇怪的行为:

考虑这个简单的类:

class Human(object):
  def __init__(self, name):
    self.__name = name

  def description(self):
    print("Hello, my name is %s" % self.__name)

我想避免在创建对象后更改名称。

如果我使用这个:

MyHuman = Human("Andy")
MyHuman.__name = "Arthur"
MyHuman.age = 23

MyHuman.description()
print MyHuman.age

它在对象实例化后不改变名称,这很好,因为我希望实例变量是私有(private)的。另一方面,我认为它会提示访问这个变量。它甚至不会提示访问一个神秘的“年龄”变量并稍后正确打印它。

我来自 C#,这对我来说似乎很奇怪。我的错误在哪里?

最佳答案

您应该了解以下内容:

  1. 当您写入不存在的对象属性时,python 系统通常不会报错,而只是创建一个新属性。
  2. 私有(private)属性不受 Python 系统保护。这是设计决定。
  3. 私有(private)属性将被屏蔽。原因是,继承链中不应该有冲突。屏蔽是通过一些隐式重命名完成的。私有(private)属性将具有真实名称
  "_<className>__<attributeName>"

有了这个名字,就可以从外面访问了。当从类内部访问时,名称将自动正确更改。

关于python - 访问私有(private)类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31277974/

相关文章:

Java - 无法找到其他类的符号错误

python - 在 Python 中将用户输入整数存储到数组中时出现值错误

python - 在 Python 中向现有 PDF 文档添加文本

python - 根据名称作为列表中的字符串调用函数

c++ - 无论选择什么选项,函数 "void sub(int Subtraction)"都保持打印

java - 带构造函数的类 newInstance()

python - 如何在 python 中生成市场的分形图

python - 安装 PyReadline 后 "ValueError: _type_ ' v ' not supported"错误

python - PyCharm 自动完成

python - 属性错误 : 'module' object has no attribute 'tests'