我必须在 python 中打开一个类似文件的对象(它是通过 /dev/ 的串行连接),然后关闭它。在我的班级的几种方法中,这已经完成了好几次。我的做法是在构造函数中打开文件,然后在析构函数中关闭它。不过,我遇到了奇怪的错误,我认为这与垃圾收集器有关,因此,我仍然不习惯不准确地知道我的对象何时被删除=\
我这样做的原因是因为我必须使用tcsetattr
每次我打开它时都会有一堆参数,到处做这些事情很烦人。所以我想实现一个内部类来处理所有这些,这样我就可以用它来做
with Meter('/dev/ttyS2') as m:
我在网上查找,但找不到关于如何解决问题的真正好的答案with
语法已实现。我看到它使用__enter__(self)
and __exit(self)__
方法。但是我所要做的就是实现这些方法并且我可以使用 with 语法吗?或者还有更多的事情吗?
是否有关于如何执行此操作的示例或一些关于如何在文件对象上实现它的文档可供我查看?
这些方法几乎是让对象工作所需的全部with
陈述。
In __enter__
您必须在打开文件对象并设置它后返回它。
In __exit__
你必须关闭文件对象。写入它的代码将位于with
声明体。
MODE = 'rb'
class Meter():
def __init__(self, dev):
self.dev = dev
def __enter__(self):
#ttysetattr etc goes here before opening and returning the file object
self.fd = open(self.dev, MODE)
return self
def __exit__(self, exception_type, exception_value, exception_traceback):
#Exception handling here
self.fd.close()
meter = Meter('/dev/tty0')
with meter as m:
#here you work with the file object.
m.fd.read()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)