Я сейчас работаю над классом Session
, который следует запускать как нормально, так и с помощью инструкции with
. Я также должен поделиться некоторыми псевдо-глобальное значение для каждой сессии:Метод Python @contextmanager, который имитирует метод открытых файлов?
session1 = Session(a, b ,c)
session2 = Session(x, y, z)
session1.start()
# Using session1 with a global value here
with session2.start():
# Using session2 with global value copy
# Coming back in session1 with the initial global value
Для управления глобальной ценности вещи, я в конечном итоге с помощью Contextual
библиотеки. (https://pypi.python.org/pypi/Contextual).
Чтобы управлять start()
как @contextmanager
, я пытался разобраться с стекю Python. Но я знаю, что это может быть сложно в зависимости от версии Python и интерпретатора.
Я хотел бы сделать то же самое, как open()
, которые вы можете использовать оба способа:
f = open('...')
with open('...') as f:
# Read the file here.
Возможно ли это? Как вы это делаете?
Спасибо за ваши идеи!
Как вы обращаетесь к этим глобальным ценностям? Кроме того, ваш пример с использованием 'open' приведет к тому, что исходное значение f будет перезаписано оператором with и будет забыто. То есть значение f после оператора with является закрытым вторым файлом, а не открытым первым. – Dunes
Это не похоже на '@ contextmanager', но вы можете реализовать' __enter __/__ exit__' в классе сеанса (так оно делается для файлов). – bereal