我正在寻找一种方法来测试一个对象是否不是“list-ish”类型,即 - 不仅该对象不可迭代(例如 - 您还可以在字符串上运行iter,或者在一个简单的实现iter的对象)但该对象不在列表族中。我将“ list ”系列定义为 list/tuple/set/frozenset,或者任何从它们继承的东西,但是 - 因为可能有一些我遗漏的东西,我想找到一种比运行isinstance
所有的更通用的方法那些类型。
我想到了两种可能的方法,但似乎都有些尴尬,因为它们对每种可能的列表类型进行了非常多的测试,我正在寻找更通用的解决方案。
第一个选项:
return not isinstance( value, (frozenset, list, set, tuple,) )
第二种选择:
return not hasattr(value, '__iter__')
测试__iter__
属性是否足够?有没有更好的方法来查找对象是否不是列表类型?
提前致谢。
编辑:
(引用@Rosh Oxymoron 的解决方案的评论):
现在更好地考虑定义,我相信说我需要找到定义中不是数组类型的所有内容,但它仍然可以是字符串/其他简单对象...
检查collections.Iterable
仍然会给我实现该方法的对象的True 。__iter__