Я работаю над приложением на Python 3, и то, что я делаю, является нетрадиционным.Python Import Module от Decorator
cx_Oracle - сложный модуль для настройки, а для моего приложения - дополнительная зависимость. То, что я хотел бы сделать, это обернуть импорт модуля в декоратор, чтобы разместить только выше функций, которые его используют. Это не будет необходимость импортировать в верхней части моего модуля и не позволяет его настроить.
class Loader():
def load_cx_oracle(func):
def inner(*args, **kwargs):
# Additional code before import.
import cx_Oracle
return func(*args, **kwargs)
return inner
@load_cx_oracle
def function_using_cx_oracle(self):
conn = cx_Oracle.connect()
Однако, когда я пытаюсь выше, я получаю NameError: name 'cx_Oracle' is not defined
Это решает мою проблему. Я надеялся пойти с декоратором для этих функций по нескольким причинам. В моем примере отсутствует некоторые элементы конфигурации. Это приложение иногда запускает одну из этих функций. В основном это будут переданные аргументы для запуска только одной функции. – user2004245
Как упоминает @Dunes, использование 'global' работает только в том случае, если декоратор определен в том же модуле, что и декорированные функции. –