Реализация использования 'with object () as f' в пользовательском классе в python

Мне нужно открыть файловый объект в python (это последовательное соединение через / dev /), а затем закрыть его. Это делается несколько раз в нескольких методах моего класса. Я БЫЛ это делал, открывая файл в конструкторе, а затем закрывая его в деструкторе. Однако у меня возникают странные ошибки, и я думаю, что это связано со сборщиком мусора и т.п., я до сих пор не привык не знать точно, когда мои объекты удаляются = \

Причина, по которой я это делаю, состоит в том, что Мне приходится использовать tcsetattr с кучей параметров каждый раз, когда я открываю его, и мне становится неприятно делать все это повсюду. Итак, я хочу реализовать внутренний класс для обработки всего этого, чтобы я мог использовать его, выполняя
с Meter ('/ dev / ttyS2') как m:

Я искал в Интернете и не смог найти действительно хороший ответ на вопрос, как реализован синтаксис с . Я видел, что он использует методы __ enter __ (self) и __ exit (self) __ . Но все ли, что мне нужно сделать, реализовать эти методы и можно ли использовать синтаксис with? Или есть еще кое-что?

Есть ли пример того, как это сделать, или какая-то документация о том, как это уже реализовано на файловых объектах, на которые я могу посмотреть?

53
задан Falmarri 22 September 2010 в 12:18
поделиться