Мені потрібно відкрити файлоподібний об'єкт у python (це послідовне з'єднання через / dev /), а потім закрити його. Це робиться кілька разів у кількох методах мого класу. Як я це робив, відкривав файл у конструкторі, а потім закривав його в деструкторі. Однак я отримую дивні помилки, і я думаю, що це пов’язано зі збирачем сміття, і тому я все ще не звик точно не знати, коли мої об’єкти видаляються = \
Причина, по якій я це робив, полягає в тому, що мені доводиться використовувати tcsetattr
купу параметрів кожного разу, коли я її відкриваю, і це дратує, роблячи все це повсюдно. Тому я хочу реалізувати внутрішній клас для обробки всього цього, щоб я міг цим користуватися
with Meter('/dev/ttyS2') as m:
Я шукав в Інтернеті, і я не міг знайти справді хорошої відповіді про те, як with
реалізований синтаксис. Я побачив, що він використовує методи __enter__(self)
і __exit(self)__
. Але чи все, що мені потрібно зробити, щоб реалізувати ці методи, і я можу використовувати синтаксис? Або це ще щось?
Чи є приклад того, як це зробити, або якась документація про те, як це реалізовано на файлових об’єктах, яку я можу переглянути?
def __enter__(self): return self
якщо потрібно посилання наMeter
в блоці with.