gpt4 book ai didi

python - Python 类中是否有 “private” 变量?

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

我来自 Java 世界,正在阅读 Bruce Eckels 的Python 3 模式、食谱和习语

在阅读有关类的内容时,它继续说在 Python 中不需要声明实例变量。您只需在构造函数中使用它们,然后它们就在那里。

例如:

class Simple:
def __init__(self, s):
print("inside the simple constructor")
self.s = s

def show(self):
print(self.s)

def showMsg(self, msg):
print(msg + ':', self.show())

如果这是真的,那么 Simple 类的任何对象都可以更改类外部变量 s 的值。

例如:

if __name__ == "__main__":
x = Simple("constructor argument")
x.s = "test15" # this changes the value
x.show()
x.showMsg("A message")

在 Java 中,我们学习过公共(public)/私有(private)/ protected 变量。这些关键字是有意义的,因为有时您希望类中的变量是类之外的任何人都无法访问的。

为什么 Python 中不需要这样做?

最佳答案

这是文化。在 Python 中,您不会写入其他类的实例或类变量。在 Java 中,如果您确实想要的话,没有什么可以阻止您这样做 - 毕竟,您始终可以编辑类本身的源代码以达到相同的效果。 Python 抛弃了安全性的伪装,并鼓励程序员承担责任。实际上,这非常有效。

如果您出于某种原因想要模拟私有(private)变量,您始终可以使用 PEP 8 中的 __ 前缀。 。 Python 会修改 __foo 等变量的名称,以便它们对于包含它们的命名空间之外的代码来说不容易可见(尽管如果您确定的话,可以绕过它)足够了,就像如果您使用 Java,可以绕过 Java 的保护一样)。

按照相同的约定,_ 前缀意味着 _variable 应该仅在类(或模块)内部使用,即使技术上没有阻止您访问它来自其他地方。您不会使用其他类的类似于 __foo_bar 的变量。

关于python - Python 类中是否有 “private” 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54730320/

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