在学习 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#,这对我来说似乎很奇怪。我的错误在哪里?
最佳答案
您应该了解以下内容:
- 当您写入不存在的对象属性时,python 系统通常不会报错,而只是创建一个新属性。
- 私有(private)属性不受 Python 系统保护。这是设计决定。
- 私有(private)属性将被屏蔽。原因是,继承链中不应该有冲突。屏蔽是通过一些隐式重命名完成的。私有(private)属性将具有真实名称
"_<className>__<attributeName>"
有了这个名字,就可以从外面访问了。当从类内部访问时,名称将自动正确更改。
关于python - 访问私有(private)类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31277974/