【发布时间】:2020-12-21 14:38:24
【问题描述】:
我有一个主类创建另一个类的实例,必须先导入该实例。
经过一段时间的调试,我发现,导入类的__init__方法中的代码在我导入时运行。但是,为了让我的代码正常工作,我需要它在导入时不运行。
我已经找到了这个thread,但它并没有真正帮助我。
为了测试,我编写了一个没有出现问题的简单应用程序:
test.py:
class foo:
def __init__(self):
print("foo")
main.py:
from test import foo
def main():
print("bar")
t = foo()
代码按预期工作,输出首先是“bar”,然后是“foo”。
__init__ 代码什么时候执行,什么时候不执行?
【问题讨论】:
-
类的
__init__方法在类实例化时执行。当您的类未实例化时,它通常不会执行。我不确定我们应该如何通过按预期工作的代码来诊断您的问题。 -
我无法共享无法按预期工作的代码,因为它不是我的。我基本上是导入一个类,似乎导入类的 init 代码在导入期间运行
-
您不必共享原始代码,但如果您需要解释,您应该创建一个实际重现问题的minimal reproducible example。
-
他们可能在您正在导入的包中实例化该类的一个实例,因此它的
__init__方法正在运行。请记住,您导入了一个包或一个类,因此该包可能有更多的东西(例如实例化一个类)。换句话说,他们可能在test.py中包含t = foo(),而当您执行from test import foo时,您正在执行该代码,而不仅仅是导入类。