从文件导入而不在该文件顶部执行导入

问题描述 投票:0回答:1

我有一个文件,

foo.py

import UnavailableModule

class Bob:
    def useful_func(self, arg):
        # Do useful stuff (doesn't use UnavailableModule)

在同一目录中的另一个文件

bar.py
中,我需要
useful_func()
但不能这样做

from foo.Bob import useful_func

因为它会导致

problem: [Error 126] The specified module could not be found
An exception has occurred, use %tb to see the full traceback.

有追溯

C:\...\bar.py in <module>()
----> 1 from foo.Bob import useful_func
C:\...\foo.py in <module>()
----> 1 import UnavailableModule

是否可以仅通过其他方式获得

useful_func()

python python-import python-module
1个回答
1
投票

首先,您的

useful_func
是一个实例方法,您可以将其与整个
Bob
类一起导入,如下所示:

from foo import Bob

然后你可以创建

Bob
的对象并像这样使用你的函数:

b = Bob()
b.useful_func('something useful i believe')

但这并不能解决你的问题。我读到的问题是,在导入

UnavailableModule
模块时运行
foo
的导入。

好吧,它将被运行,因为这就是导入的工作方式,您可以使用这样的构造来阻止此导入:

class Bob:
  def useful_func(self, arg):
      pass

if __name__ == '__main__':
  import UnavailableModule

这将防止在从另一个模块导入

UnavailableModule
模块时导入您的
foo
。但是我不确定这是否是好的做法。不过它确实有效。

© www.soinside.com 2019 - 2024. All rights reserved.