Можно ли перегрузить / импортировать в Python?

Возможно ли перегрузить оператор from / import в Python?

Например, если jvm_object является экземпляром класса JVM , можно ли написать этот код:

 class JVM(object): def import_func(self, cls): return something... jvm = JVM() # would invoke JVM.import_func from jvm import Foo 

2 Solutions collect form web for “Можно ли перегрузить / импортировать в Python?”

В этом сообщении показано, как использовать функции, внедренные в PEP-302, для импорта модулей через Интернет. Я размещаю его как пример того, как настроить оператор импорта, а не как предлагаемое использование;)

Трудно найти что-то, что невозможно в динамическом языке, таком как Python, но действительно ли нам нужно злоупотреблять всем? Во всяком случае, вот он:

 from types import ModuleType import sys class JVM(ModuleType): Foo = 3 sys.modules['JVM'] = JVM from JVM import Foo print Foo 

Но один шаблон, который я видел в нескольких библиотеках / проектах, – это своего рода _make_module() , которая динамически создает ModuleType и инициализирует все в нем. После этого текущий модуль заменяется новым модулем (используя назначение для sys.modules ), и _make_module() удаляется. Преимущество этого заключается в том, что вы можете перебирать модуль и даже добавлять объекты к модулю внутри этого цикла, что иногда весьма полезно (но используйте его с осторожностью!).

  • Элементы перегрузки Python
  • Django: Нечувствительный к регистру сопоставление имени пользователя с пользователем auth?
  • Методы с тем же именем в одном классе в python?
  • Python - лучший язык программирования в мире.