Контекстные менеджеры как атрибутыPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Контекстные менеджеры как атрибуты

Сообщение Anonymous »

Мне трудно писать чистый код с контекстными менеджерами в Python, не попадая в администратор контекста. Представьте себе что-то вроде: < /p>

Код: Выделить всё

class A:
def __init__(self):
self.b =  B()  # where B is a context manager
сейчас утечка, потому что я не использовал оператор с . В дикой природе я видел две решения для этого:

[*] inject b в классе и иметь некоторые внешние с ratport

Код: Выделить всё

with B() as b:
a = A(b)
Создайте контекстный менеджер, который также реализует закрытие b :

Код: Выделить всё

with A() as a:
...
# A will close B now in its __exit__ method
< /code>
< /li>
< /ol>
Мне не нравится оба метода. В моем примере использование B 
внутри является детализацией реализации. Это не то, что я хочу подвергнуть внешнему миру. Таким образом, вариант 1, очевидно, не подходит, но даже вариант 2 раскрывает некоторые детали. Главным образом, что А делает какое -то управление ресурсами. Кроме того, необходимость вручную реализовать метод __exit __ , кажется, немного побеждает цель, чтобы быть менеджером контекста, если я не могу использовать синтаксис менеджера контекста. Итак, как я могу избежать создания всех моих контекстных менеджеров в моих классах, если есть цепочка зависимостей? Таким образом, у меня может быть агент класса , который может выполнить код. Это делается с ноутбуком Jupyter. Таким образом, моей программе нужен работает сервер ноутбуков Jupyter. В идеале я хотел бы инкапсулировать это в классе агента. Класс агента запускает сервер и останавливает сервер. Сервер здесь реализован как диспетчер контекста. Решение, которое я бы придумал, - это делает агента теперь менеджером контекста, которое мне не нравится. Потому что тогда какой -то класс, использующий агента, тоже должен стать менеджером контекста, ... так что в конце концов моя программа - менеджер контекста.

Подробнее здесь: https://stackoverflow.com/questions/793 ... attributes
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Контекстные менеджеры как атрибуты
    Anonymous » » в форуме Python
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • Контекстные менеджеры как атрибуты
    Anonymous » » в форуме Python
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Pythonic способ сочинять контекстные менеджеры для объектов, принадлежащих классу
    Anonymous » » в форуме Python
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Pythonic способ сочинять контекстные менеджеры для объектов, принадлежащих классу
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Менеджеры контекста Python как атрибуты класса
    Anonymous » » в форуме Python
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous

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