Импорт модулей внутри класса python

В настоящее время я пишу класс, который нуждается в os , stat и некоторых других.

Каков наилучший способ импорта этих модулей в мой класс?

Я думаю о том, когда другие будут использовать его, я хочу, чтобы модули «dependency» уже импортировались, когда экземпляр класса был создан.

Теперь я импортирую их в свои методы, но, возможно, есть лучшее решение.

4 Solutions collect form web for “Импорт модулей внутри класса python”

Если ваш модуль всегда будет импортировать другой модуль, всегда ставьте его наверху как PEP 8, а остальные ответы указывают. Кроме того, поскольку @delnan упоминает в комментарии, sys , os и т. Д. Все равно используются, поэтому им не повредит импорт их по всему миру.

Тем не менее, нет ничего плохого в условном импорте, если вам действительно нужен только модуль в определенных условиях исполнения.

Если вы хотите импортировать их только в том случае, если класс определен , например, если класс находится в условном блоке или другом классе или методе, вы можете сделать что-то вроде этого:

 condition = True if condition: class C(object): os = __import__('os') def __init__(self): print self.os.listdir C.os c = C() 

Если вы хотите, чтобы он был импортирован, если экземпляр класса был создан, выполните его в __new__ или __init__ .

PEP 8 по импорту:

Импорт всегда помещается в верхнюю часть файла, сразу после комментариев модуля и доклингов, а также перед глобалами и константами модуля.

Это упрощает просмотр всех модулей, используемых в файле, и позволяет избежать повторной копии импорта в нескольких местах, когда модуль используется в нескольких местах. Все остальное (например, импорт функций на уровне функций / методов) должно быть абсолютным исключением и должно быть обоснованным.

 import sys from importlib import import_module class Foo(): def __init__(self): if self.condition: self.importedModule = import_module('moduleName') if 'moduleName' in sys.modules: self.importedModule.callFunction(params) #or if self.condition: self.importedModule.callFunction(params) 

Это (поиск в разделе «Импорт») официальной бумаги указывает, что import s обычно должен быть помещен в верхнюю часть исходного файла. Я бы придерживался этого правила, кроме особых случаев.

  • Python, используя методы из других классов
  • Что такое атрибут __dict __.__ dict__ класса Python?
  • Родительский метод вызова Python Множественное наследование
  • Наличие относительного пути в модуле относительно файла, вызывающего модуль
  • Шаблон PyCharm для класса python __init__
  • Переопределение методов родительского класса
  • Почему всегда добавлять self в качестве первого аргумента методам класса?
  • Как вызвать супер-конструктор?
  • Python - лучший язык программирования в мире.