慕的地6264312
发生这种奇怪的行为是因为您print("Middle",x,y)不在函数的定义中,所以它被调用 before print("Out",x,y)。您的代码相当于:x = 5y = 3class Exp(object): def __init__(self, x, y): self.x = x self.y = y print("In",x, y, self.x, self.y)print("Middle",x,y)print("Out",x,y) Exp(1,2)谁的输出将是:Middle 5 3Out 5 3In 1 2 1 2纠正此问题的一种可能方法是print("Middle",x,y)在构造函数中定义 。x = 5y = 3class Exp(object): def __init__(self, x, y): self.x = x self.y = y print("In",x, y, self.x, self.y) print("Middle",x,y)print("Out",x,y) Exp(1,2)然后您将获得的输出是:Out 5 3In 1 2 1 2Middle 1 2
慕码人2483693
类方法不会在编译时执行,它们必须被调用。上面的代码中的 print(middle) 语句未在类方法中定义。而 print(In) 语句是在init(也称为构造函数)方法中定义的。当您运行代码并且编译器运行脚本时,在调用init () 方法之前不会调用 print(In) 语句。但是,此 print(middle) 行并未定义为 Exp 类的方法,而是作为内置函数执行,尽管有空格。因此,当 Python 编译 Exp 类时,会调用 print(middle) 语句。这是唯一一次调用 print(middle) 语句。由于它不在类方法中,因此以后无法在程序中访问它。如果您尝试下面的代码,您会得到输出“Out”和“In”。您只能通过调用 Exp.test() 获得“中间”x = 5y = 3class Exp(object): def __init__(self, x, y): self.x = x self.y = y print("In",x, y, self.x, self.y) def test(self): print("Middle",x,y) print("Out",x,y)Exp(1,2)