Читайте эту статью здесь: https://tryolabs.com/blog/2013/07/05/run-time-method-patching-python/
следует:
foo.py
class Foo():
def create_object():
return 'Creating object 1'
def post(self):
result = self.create_object()
bar.py
class Bar(Foo):
def create_object(self):
return 'Creating object 2'
def run(self):
Foo.create_object = self.create_object
Вы могли бы хотеть взглянуть на модуль импорта , который в основном делает то, что Вы делаете вручную выше. Таким образом, можно сначала искать модуль с find_module()
и затем загрузить его через load_module()
или путем простого импорта его (после проверки конфигурации).
И btw, при использовании кроме: Я всегда добавлял бы, что определенное исключение к нему (здесь ImportError) к не случайно фиксирует несвязанные ошибки.
try:
метод не должен быть глобальным —, он может использоваться в любом объеме и таким образом, модули могут быть "лениво загружены" во времени выполнения. Например:
def foo():
try:
import external_module
except ImportError:
external_module = None
if external_module:
external_module.some_whizzy_feature()
else:
print("You could be using a whizzy feature right now, if you had external_module.")
, Когда Ваш скрипт будет запущен, никакая попытка не будет предпринята для загрузки external_module
. Первый раз foo()
называют, external_module
(при наличии) загружается и вставляется в локальный объем функции. Последующие вызовы к foo()
повторно вставляют external_module
в его объем, не будучи должен перезагрузить модуль.
В целом, лучше позволять Python обработать логику импорта —, это делало его некоторое время. :-)
Один способ решить проблему различных зависимостей для различных функций состоит в том, чтобы реализовать дополнительные опции как плагины. Тем путем пользователь управляет, какие опции активированы в приложении, но не ответственно за разыскивание зависимостей сам. С той задачей затем справляются во время установки каждого плагина.