如何/何时关闭对象中的文件?

时间:2016-07-22 21:01:31

标签: python

我正在尝试设计一个类来管理Linux中的视频设备(/dev/video*)。

由于我的C ++背景,我自然以为我可以在构造函数中打开文件并在析构函数中关闭它。

后来我学会了python并不能保证何时/如果调用析构函数。

然后我想我可以创建自己的“初始化”和“去初始化”方法来管理设备文件的打开/关闭,但是当构造了对象但未初始化时,它会创建时间间隔。对象被去初始化但没有被破坏,此时对象没有有效的内部状态(这些方法在打开的视频设备上大多是ioctls)。

这意味着我需要在每个方法的开头验证对象状态,比如内置文件对象(f=open()f.close)?或者只是在已经去初始化的对象上调用方法时发生I / O错误?

1 个答案:

答案 0 :(得分:0)

继续在构造函数中打开文件,它不会伤害任何东西。

Python提供了with statement,允许在构造/销毁之外设置和拆除对象。您的对象必须包含__enter____exit__方法;在__enter__语句的开头调用with,并在__exit__中包含的代码块结束时调用with。值得注意的是,__exit__被调用,无论块是运行完成还是因例外而提前终止。

显然with只有在您当时正在使用该对象时才有用,而不是在您将其作为成员存储在另一个对象中时。但是你可以更深入地使用with围绕那个对象,并使其__exit__函数在你自己的对象上调用一个清理函数。