Как я могу получить доступ к атрибутам менеджера контекста?

Я хочу сделать что-то вроде:

class my_context(object):
    def __init__(self):
        self.obj1 = Obj()
        self.obj2 = Obj()
        ...

    def __enter__(self):
        ''' initialize objects '''

    def __exit__(self, type, value, tb):
        ''' uninitialize objects '''

Здесь очень много Obj атрибуты, которые являются ресурсами, которые должны быть закрыты / удалены / и т.д. Я надеялся использовать менеджер контекста, чтобы настроить их, а затем избавиться от них. Однако я обнаружил, что не могу получить доступ к атрибутам при попытке:

with my_context() as cont:
    cont.obj1  # doesn't work

Есть ли способ получить доступ к этим атрибутам?

1 ответ

Решение

Для with... as Синтаксис для работы, ваш __enter__() должен вернуть значение.

Если вы хотите использовать те же атрибуты, что и ваш my_context класс обеспечивает, вы, вероятно, хотите вернуть self,

Другие вопросы по тегам