类成员 - Java与Python

Ger*_*ard 9 python java

我现在来自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)

这是我的问题:

  1. Python代码是否正确?
  2. 与Java相比,Python的编程风格在我看来更紧凑.所以我想知道,为什么 Python需要传递一个"自我" - 参数.
  3. 在这一点上,Python似乎比Java更"复杂".或者有没有办法删除"自我" - 参数?

Ale*_*eau 7

首先,你的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

  • 在PEP008中指定了`self`:"*总是使用self作为实例方法的第一个参数.*" (2认同)