我现在来自Java和学习Python.我尝试理解Python中类成员的概念.
这是Java中的示例程序:
class Hello {
int x = 0;
void ex() {
x = 7;
}
public static void main(String args[]) {
Hello h = new Hello();
System.out.println(h.x);
h.ex();
System.out.println(h.x);
} }
Run Code Online (Sandbox Code Playgroud)
这是我在Python中所做的,遵循我发现的一些例子:
class Hello:
def __init__(self) :
self.x = 0
def ex(self):
self.x = 7
h = Hello()
print(h.x)
h.ex()
print(h.x)
Run Code Online (Sandbox Code Playgroud)
两个程序都返回:
0
7
Run Code Online (Sandbox Code Playgroud)
这是我的问题:
首先,你的python代码是正确的.
这只是关于语言设计方式的问题.Java使用一种对对象的引用的自动推断.对于非Java专家来说,它有时会导致奇怪的行为:
private int a;
public int add(int a, int b){
return a+b; // what a will it use?
}
Run Code Online (Sandbox Code Playgroud)
所以,这就是为什么在java中有关键字this可以使用(但你不是被迫)来解决这种模糊性.
python团队决定强制使用self(或任何其他词,但稍后我会解释)这个词来避免这种问题.你无法摆脱它.虽然,java仍然是比python更冗长的语言,关键字self不会影响很多假设.
但是,您没有义务使用"self"字作为当前对象的引用.您可以使用任何其他单词作为您方法的第一个参数(但这是一个非常糟糕的做法).
在这里,您可以看到两个参考资料,深入解释为什么"自我留在这里":
http://www.programiz.com/article/python-self-why
http://neopythonic.blogspot.be/2008/10/why-explicit-self-has-to-stay.html