我正在写一个小的 python 脚本来理解一个概念,又遇到了另一个困惑。这是代码-
x = 5
y = 3
class 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 3
Out 5 3
In 1 2 1 2
现在,我的想法是 python 解释器开始读取并执行从第一行到最后一行的代码。它仅在“调用”时执行类内部的代码,而不是在定义时执行。因此,输出应该首先打印“Out”。但这里它首先打印“中间”。这不应该发生,因为 python 解释器在第一次遇到“中间”时 - 它在定义之内,因此不应该在那个时候执行。只有在阅读了调用类“Exp”的最后一行代码后才能执行它。
我在 Google 和 StackOverflow 上搜索了解决方案,但找不到为类解释的解决方案。
请帮助我理解我在哪里弄错了......
最佳答案
你的怀疑是对的。 6 个月前我也有同样的疑问,我的一个 friend 帮我找到了答案。
print("Middle",x,y)
以上语句不属于任何方法。它属于 Exp
类。 __init__()
方法在创建对象时执行,并在从您端实例化对象时由 Python 解释器在内部调用。由于上面的语句不是任何方法的一部分,解释器在调用 __init__
方法之前执行它。由于变量 x
和 y
都在类 Exp
的范围内可用,因此它不被视为错误并且解释器会执行它。
如果删除变量 x
和 y
的声明,您将看到如下所示的 NameError
。
Traceback (most recent call last):
File "trial.py", line 9, in <module>
print("Middle",x,y)
NameError: name 'x' is not defined
这是因为 x
和 y
甚至不是从类 Exp
的角度创建的。
关于python - python类的执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55793567/