我正在尝试设计一个类来管理Linux(/dev/video*
)中的视频设备。你知道吗
后来我了解到python不能保证何时/是否调用析构函数。你知道吗
然后我想我可以用我自己的“初始化”和“反初始化”方法来管理设备文件的打开/关闭,但是当对象被构造但没有初始化时,以及当对象被反初始化但没有销毁时,它会产生时间间隔,此时对象没有有效的内部状态(方法主要是打开的视频设备上的ioctls
)。你知道吗
这意味着我需要在每个方法的开头验证对象状态,比如内置文件对象(f=open()
,f.close
)?或者在已经取消初始化的对象上调用某个方法时让I/O错误发生?你知道吗
继续在构造函数中打开文件,它不会伤害任何东西。你知道吗
Python提供了^{} statement 来允许在构建/销毁之外设置和拆卸对象。对象必须包含
__enter__
和__exit__
方法;在with
语句的开头调用__enter__
,在with
中包含的代码块结束时调用__exit__
。值得注意的是__exit__
是被调用的,不管该块是运行到完成状态,还是由于异常而提前终止。你知道吗显然
with
只在您当时使用对象时才有用,而不是将其作为成员存储在另一个对象中。但是您可以更深入一层,在对象周围使用with
,并让它的__exit__
函数在您自己的对象上调用cleanup函数。你知道吗相关问题 更多 >
编程相关推荐