Передача аргументов в __enter__ при использовании глобальной переменнойPython

Программы на Python
Ответить
Anonymous
 Передача аргументов в __enter__ при использовании глобальной переменной

Сообщение Anonymous »

Я использую глобальную переменную для хранения некоторых полезных данных, которые мне нужны на протяжении всего выполнения моего кода.
Это примерно так:
config_object = None

def init_config(config_file=CONFIG_PATH):
# some initialization code...
global config_object
config_object = U2DBLiveConfig(config_file)

def get_config():
if not config_object:
init_config()
return config_object

Я добавил методы __enter__ и __exit__, чтобы можно было установить флаг при использовании объекта конфигурации вместе с объектом сеанса другого типа

class U2DBLiveConfig:

def __init__(self, config_file_path=CONFIG_PATH):
self.__uopy_session_opened = False
# rest of init code

def __enter__(self):
self.__uopy_session_opened = True
return self

def __exit__(self, exc_type, exc_val, exc_tb):
self.__uopy_session_opened = False

Я использую оба объекта в одном с таким оператором.

with create_uopy_session() as uopy_session, get_config() as cfg:
# here, the __uopy_session_opened flag is set to true


Я хотел бы передать objetc uopy_session в метод __enter__, чтобы к нему можно было получить доступ из config_object в другом месте.
Обратите внимание, что config_object мог быть создан до вызова оператора with, поэтому я не могу передать его в __init__.
Есть ли способ сделать что-то подобное?

class U2DBLiveConfig:

def __init__(self, config_file_path=CONFIG_PATH):
self.__uopy_session_opened = False
self.__uopy_session = None
# rest of init code

def __enter__(self, **kwargs):
self.__uopy_session_opened = True
self.__uopy_session = kwargs['uopy_session']
return self

def __exit__(self, exc_type, exc_val, exc_tb):
self.__uopy_session_opened = False
self.__uopy_session = None


Подробнее здесь: https://stackoverflow.com/questions/792 ... l-variable
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»