Соглашение об именах для классов диспетчера контекста (с блоками)

Существует ли общее соглашение об именах для классов или функций, предназначенных для использования в блоке with, например

with CreateSomeContext() as x:
    ...

? Что-то, что сигнализирует о том, что класс или результат функции следует использовать с with?


person Petr    schedule 13.11.2013    source источник
comment
Насколько я знаю, его нет. Что у нас есть до сих пор, так это то, что для функций и имен переменных используется this_is_a_function_or_variable, а для классов (типов) используется ThisIsAClassObject, а для констант используется FULL_CAPITALS.   -  person Peter Varo    schedule 13.11.2013
comment
Насколько я знаю, нет, так как with можно использовать для самых разных целей. Некоторые прямо помещают слово context в имя, однако чаще всего это происходит, когда with является единственным местом, где вы хотите использовать такой класс. Существует ряд классов, которые можно использовать с with без (без каламбура) контекста слова в их именах: от файлов до warnings.catch_warnings и т. д.   -  person Bakuriu    schedule 13.11.2013


Ответы (2)


В соответствующем PEP 0343 упоминаются два соглашения. :

Время, используемое в названиях примеров контекстов, не является произвольным. Прошедшее время («-ed») используется, когда имя относится к действию, которое выполняется в методе __enter__ и отменяется в методе __exit__. Прогрессивное время («-ing») используется, когда имя относится к действию, которое должно быть выполнено в методе __exit__.

person glglgl    schedule 18.10.2018

Не существует соглашения об именах (open, socket.create_connection, urllib.request.urlopen все возвращают контекстные менеджеры, которые можно использовать с with), но контекстные менеджеры будут иметь методы __enter__ и __exit__.

Примечание: в случае open("file", "w") возвращаемое значение (файловый объект) является диспетчером контекста, не open.

person Ramchandra Apte    schedule 13.11.2013