【发布时间】:2011-08-17 00:12:38
【问题描述】:
一些 Python 方法适用于各种输入源。例如,XML 元素树parse 方法接受一个对象,该对象可以是字符串(在这种情况下,API 将其视为文件名),也可以是支持 IO 接口的对象,如文件对象或 @987654322 @。
所以,显然parse 方法正在执行某种接口嗅探,以找出要采取的行动方案。我想实现这一点的最简单方法是通过说isinstance(x, str) 检查输入参数是否为字符串,如果是则将其视为文件名,否则将其视为 IO 对象。
但为了更好的错误检查,我认为最好检查 x 是否支持 IO 接口。检查对象是否支持指定接口的标准惯用方法是什么?
我想,一种方法就是说:
if "read" in x.__class__.__dict__: # check if object has a read method
但仅仅因为x 有一个“读取”方法并不一定意味着它支持 IO 接口,所以我假设我还应该检查 IO 接口中的每个方法。这通常是最好的方法吗?还是我应该忘记检查接口,而让可能的AttributeError 在堆栈中进一步处理?
【问题讨论】:
标签: python interface python-3.x