Импорт определенной функции только из файла


У меня есть один файл, 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() только каким-то другим способом?

1 2

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 из другого модуля. Однако я не уверен, что это хорошая практика. Но это работает.