gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 12:38:56 24 4
gpt4 key购买 nike

在学习 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com