Py学习  »  Python

为什么在下面的Python代码中可以打印私有成员_分子和_分母?[重复]

Dexter • 2 年前 • 853 次点击  

我来自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中,我们学习了公共/私有/受保护变量。这些关键字是有意义的,因为有时你需要一个类中的变量,而这个类之外的任何人都无权访问它。

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/132167
 
853 次点击  
文章 [ 1 ]  |  最新文章 2 年前
julemand101 Simon Stanford
Reply   •   1 楼
julemand101 Simon Stanford    2 年前

这是文化。在Python中,您不会写入其他类的实例或类变量。在Java中,如果您 真正地 想要——毕竟,您可以随时编辑类本身的源代码,以达到相同的效果。Python放弃了安全性的伪装,鼓励程序员负责任。实际上,这非常有效。

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

按照同样的惯例 _ 前缀的意思是 即使你在技术上没有被阻止,也要远离 .你不能玩弄另一个类的变量 __福 _bar .