小编典典

Python 在类中有“私有”变量吗?

all

我来自 Java 世界,正在阅读 Bruce Eckels 的 Python 3 Patterns, Recipes and Idioms

在阅读类时,它继续说在 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 中,我们学习了公共/私有/受保护变量。这些关键字是有意义的,因为有时您希望类中没有任何人无法访问的类中的变量。

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


阅读 104

收藏
2022-03-03

共1个答案

小编典典

这是文化。在 Python 中,您不会写入其他类的实例或类变量。 在 Java 中,如果你真的
想这样做,没有什么能阻止你做同样的事情——毕竟,你总是可以编辑类本身的源代码来达到同样的效果。Python
放弃了这种安全性的伪装,并鼓励程序员承担责任。在实践中,这非常有效。

如果出于某种原因想要模拟私有变量,您始终可以使用PEP
8
__中的前缀。Python 会破坏变量的名称,这样它们就不容易被包含它们的类之外的代码看到(尽管如果你有足够的决心,你 可以
绕过它,就像你 可以 绕过 Java
的保护一样,如果你使用它)。__foo

按照同样的约定,_前缀意味着 远离,即使你在技术上没有被阻止这样做 。你不要玩弄另一个类的看起来像__fooor的变量_bar

2022-03-03