【问题标题】:Python: Importing classes runs the code in __init__()Python:导入类在 __init__() 中运行代码
【发布时间】: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 时,您正在执行该代码,而不仅仅是导入类。

标签: python import init


【解决方案1】:

当你调用foo()时,你的foo类的__init__()会被执行

因此,在您的情况下,构造函数调用将在您执行 t = foo() 时发生

【讨论】:

    猜你喜欢
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 2014-06-01
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多