Как импортировать часть модуля в Python? - PullRequest
4 голосов
/ 26 ноября 2010

Мне нужно использовать модуль Python (доступно в некоторой библиотеке). Модуль выглядит так:

class A:
  def f1():
  ...

print "Done"
...

Мне нужна только функциональность класса А. Однако, когда я импортирую модуль, код внизу (печать и другие) выполняется. Есть ли способ избежать этого? По сути, мне нужно импортировать часть модуля: «из module1 import A», который должен импортировать только A. Возможно ли это?

Ответы [ 3 ]

11 голосов
/ 26 ноября 2010

Да, конечно:

from module1 import A

Общий синтаксис. Например:

from datetime import timedelta

Код внизу должен быть защищен от запуска во время импорта, упакованный следующим образом:

if __name__ == "__main__":
  # Put code that should only run when the module
  # is used as a stand-alone program, here.
  # It will not run when the module is imported.
2 голосов
/ 30 мая 2011

Если вас раздражают только операторы печати, вы можете перенаправить вывод кода куда-то невидимым, как объяснено в одном из комментариев этого поста: http://coreygoldberg.blogspot.com/2009/05/python-redirect-or-turn-off-stdout-and.html

sys.stdout = open(os.devnull, 'w')
# now doing the stuff you need
...

# but do not forget to come back!
sys.stdout = sys.__stdout__

Документация: http://docs.python.org/library/sys.html#sys.stdin

Но если вы хотите деактивировать модификации файла или трудоемкий код, единственное, что мне приходит в голову, это какой-то подвох: скопируйте нужные вам объекты в другой файл, затем импортируйте его (но я не рекомендую его !).

0 голосов
/ 26 ноября 2010

В дополнение к @ ответу unwind обычным способом сделать это является защита кода в модуле, который должен запускаться, только если модуль используется непосредственно с:

if __name__ == "__main__":
    <code to only execute if module called directly>

Таким образом, вы можете импортировать модуль в обычном режиме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...