Импорт модулей внутри класса 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
  • Как я могу динамически создавать методы класса для класса в python
  • Python: определение классов в пакетах
  • Что происходит, когда вы принадлежите модулю вместо класса в Python?
  • Создание объекта Python
  • unbound method должен вызываться с экземпляром как первый аргумент (вместо этого ничего не получается)
  • Вызов переопределенного метода, суперкласс переадресовывает вызовы
  • Виртуальные классы: делать это правильно?
  • Python: Разрешить методы, которые не определены специально, называются ala __getattr__
  • Объявление класса с его экземпляром внутри Python
  • Каков прецедент для метода __new__ для возврата объекта другого типа, чем его первый аргумент?
  •  
    Interesting Posts for Van-Lav

    Удвоенное состояние Tweepy

    Поиск файлов (ключ) в ведро s3 занимает больше времени

    Как написать фильтр нижних частот для дискретизированного сигнала в Python?

    Как я могу имитировать вход для stdin для pyunit?

    Как проверить необоснованное значение с помощью add_xpath в scrapy и установить значение элемента в значение по умолчанию?

    Python Reverse Найти в строке

    импортирование элементов модуля в другое без квалифицированного имени

    Как я могу проверить вес Хэмминга без преобразования в двоичный файл?

    Отменить токенину новой строки в одном токене на строки файлов? – Unix

    C # способ имитировать синтаксис словаря Python

    Сортировка счетчика частоты слов с использованием python

    pytz: Почему нормализация необходима при переходе между часовыми поясами?

    Настройка цвета фона в Seaborn

    ftps.storlines socket.timeout, несмотря на завершение загрузки файлов

    Функция вызова только при запуске PyMOL

    Python - лучший язык программирования в мире.