导入 class 也会导入 argparse 选项

Importing class imports argparse options as well

我有一个脚本 x_1.py,我在其中定义了一个 class Class_X。

我正在使用的另一个脚本是 x_2.py,其中我有以下行:

from x_1 import Class_X

脚本 x_1.py 和 x_2.py 都有不同的 argsparse 选项。当我调用 python x_1.py --h 时,我得到 x_1.py 的正确参数选项。当我调用 python x_2.py --h 时,我收到 x_1.py 的参数选项,而不是 x_2 的参数选项。

知道如何解决这个问题吗...?

很可能(除非你做的事情真的很奇怪),你想在 x_1.py 中添加一个守卫来保护那些不应该是 运行 的代码,如果脚本被导入的话.

def some_function():
   pass

p = argparse.ArgumentParser()
p.add_argument(...)

if __name__ == "__main__":
    args = p.parse_args()
    # do some other stuff

现在,如果将 x_1 导入到另一个模块中,只会定义 some_functionpp.parse_args 不会被调用,p 本身只有在 x_2 决定使用它时才会被使用。如果 p 对其他模块不感兴趣,它的定义和配置也可以移到 if 语句中。