我来自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())
Run Code Online (Sandbox Code Playgroud)
如果这是真的,那么类的任何对象都Simple可以只改变s类外的变量值.
例如:
if __name__ == "__main__":
x = Simple("constructor argument")
x.s = "test15" # this changes the value
x.show()
x.showMsg("A message")
Run Code Online (Sandbox Code Playgroud)
在Java中,我们学习了有关公共/私有/受保护变量的知识.这些关键字是有意义的,因为有时你想要类中的变量,类外没有人可以访问.
为什么Python中不需要这样做?
我在第三方设计的设计很差JAR,我需要访问其中一个私有字段.例如,为什么我需要选择私人领域是否有必要?
class IWasDesignedPoorly {
private Hashtable stuffIWant;
}
IWasDesignedPoorly obj = ...;
Run Code Online (Sandbox Code Playgroud)
我如何使用反射来获得价值stuffIWant?
在其他语言中,有助于生成更好代码的一般准则总是尽可能隐藏所有内容.如果对变量是私有还是受保护存在疑问,最好与私有变量一起使用.
对Python来说也是如此吗?我应该首先在所有内容上使用两个前导下划线,并且只在我需要时将它们隐藏起来(只有一个下划线)吗?
如果惯例只使用一个下划线,我也想知道其基本原理.
这是我在JBernardo的回答中留下的评论.它解释了为什么我问这个问题,以及为什么我想知道为什么Python与其他语言不同:
我来自语言,训练你认为一切都应该只是公开的,而不是更多.原因是这将减少依赖性并使代码更安全.反向做事的Python方式 - 从公共开始到隐藏 - 对我来说很奇怪.