pythonic方法根据参数类型返回对象

时间:2016-09-06 19:49:56

标签: python

我有一个简单的类,可以在各种基类上运行(字符串,列表,文件......在Python3.x中传递给它并返回相同的类型。现在,我正在使用isinstance对于类型检查虽然已经阅读了这样做的所有警告。

我的问题是写这个函数的pythonic方法是什么。 '鸭子打字'似乎更适合测试使用正确的类型。我考虑通过传递类型[func(type, input)]或测试hasattr进行重载。我希望代码与最佳实践保持一致,未来友好且可由我自己以外的程序员升级。

1 个答案:

答案 0 :(得分:2)

您应该检查对象的行为,而不是检查对象的实际类型

我的意思是,而不是

isinstance(foo, str) or isinstance(foo, list) or ...

您对它是否是序列更感兴趣,这意味着它已定义__iter__例如

hasattr(foo, '__iter__')

从这个意义上讲,你并不关心对象本身是什么,而只是想让对象以某种方式行事。

同样,如果你想让对象成为"可索引的"你可以检查

hasattr(foo, '__getitem__')

你可以按照这种模式强制执行你的打字"鸭子打字"设计。