python链接模块执行

2024-04-23 14:40:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我的情况如下:

main.py
moduleA.py
moduleB.py

moduleA contains main() function
moduleB contains main() function

我主要是:

import moduleA, moduleB

def main():
    moduleA.main()
    moduleB.main()

if __name__ == '__main__':
    main()

我想知道我是否可以链接模块执行:

import moduleA, moduleB

def main():
    moduleA().moduleB()

if __name__ == '__main__':
    main()

它是可以实现的吗?我知道上面的代码将无法工作,因为modul是不可调用的。你知道吗


Tags: 模块代码namepyimportif链接main
1条回答
网友
1楼 · 发布于 2024-04-23 14:40:36

如果您真的愿意,您可以使模块可调用。你知道吗

Christoph Böddeker has outlined a solution__call__魔术方法添加到types.ModuleType的子类,并将此类分配给模块。这个答案是基于替换中实际模块的Alex Martelli's approach系统模块通过调用所讨论方法的可调用类实例。后一种解决方案隐藏尚未添加到类中的模块的所有内容,而前一种解决方案保持模块的行为和其中包含的项的公开。你知道吗

根据您的需求,Christoph的解决方案如下所示:

模数a.py以及模块b.py

import sys

class MyModule(sys.modules[__name__].__class__):
    def __call__(self):
        self.main() # call your main function here

sys.modules[__name__].__class__ = MyModule


def main():
    "do your stuff"

主.py

import moduleA, moduleB

def main():
    moduleA()
    moduleB()

if __name__ == '__main__':
    main()

不过,我建议不要这样做。你知道吗

  1. 我认为这违反了最基本的原则。你知道吗
  2. 在每个您希望可调用的模块上实现这两种方法都比显式调用moduleA.main()要复杂得多

相关问题 更多 >