为什么从一个模块中导入一个类会运行该类对象的列表?

8 浏览
0 Comments

为什么从一个模块中导入一个类会运行该类对象的列表?

我有一个module.py文件,内容如下:\n

import dataclass
@dataclass
class A:
    x: int
    y: int
    def big_method(self):
        do_big_stuff(x, y)
LIST_OF_A = [A(2, 3), B(4, 5)]

\n为什么当我在script.py中使用以下代码时:\n

from module import A

\nscript.py会运行并实例化LIST_OF_A呢?唯一的解决方法是将文件中的类定义和LIST_OF_A分开。有没有一种方法能够将它们合并到一个module.py中呢?

0
0 Comments

当你从一个模块中导入一个类时,Python会执行该模块中的所有代码。为了避免不必要的代码执行,你可以在模块文件中使用特殊的条件语句来控制只有在直接运行该文件时才执行特定的代码。

在你的模块文件中,你应该在def main()函数中编写你的代码。这样,只有当你直接运行该文件时,才会执行这些代码。如果你从其他文件导入该模块,那么main()函数中的代码将被忽略。

以下是一个示例,展示了如何使用if __name__ == "__main__"条件来控制代码的执行:

def main():
    """只有当直接运行该文件时才会执行的代码写在这里"""
    pass
if __name__ == "__main__":
    main()

通过这种方式,你可以确保只有当你直接运行模块文件时,才会执行你想要运行的代码。当你从其他文件导入该模块时,main()函数中的代码将不会被执行。

这种方法可以帮助你避免不必要的代码执行,并且提供了更好的模块化和可重用性。

0