Python:确定一个对象是否像文件一样?

Ric*_*d J 5 python types file

我正在为我的应用程序编写一些单元测试(使用unittest模块),并希望编写一些可以验证我正在调用的方法返回"类文件"对象的东西.由于这不是一个简单的异地调用,我想知道确定这个的最佳做法是什么?

因此,概述:

possible_file = self.dao.get_file("anotherfile.pdf")
self.assertTrue(possible_file is file-like)
Run Code Online (Sandbox Code Playgroud)

也许我必须关心这个文件对象实现的特定接口,或者哪些方法使它像我想要支持的文件?

谢谢,

[R

Ale*_*lli 7

对于哪些对象"足够像文件"没有"官方定义",因为类文件对象的各种用途具有这样的不同要求 - 例如,一些仅需要readwrite方法,其他需要各种线的一些子集 -读取方法......一些需要该fileno方法的方法,甚至不能由标准库中的模块StringIOcStringIO模块提供的"非常类文件的对象"提供.这绝对是一个"灰色阴影"的问题,而不是黑白分类法!

所以,你需要确定哪些方法需要.为了检查它们,我建议使用装饰器定义您自己的FileLikeEnoughForMe 抽象基类abstractmethod,并使用isinstancefor class 检查对象,如果您使用的是Python 2.6或更高版本:这是推荐的习惯用语,而不是一堆hasattr检查这将是不太可读和更复杂(当检查正确加强那些属性实际上是方法等;-).


gru*_*czy 2

检查返回的对象是否提供您正在寻找的接口。例如这样:

self.assert_(hasattr(possible_file, 'write'))
self.assert_(hasattr(possible_file, 'read'))
Run Code Online (Sandbox Code Playgroud)