【发布时间】:2013-06-02 14:26:30
【问题描述】:
我们有一个函数,它接受各种不同类型的输入:函数、字符串、编译的正则表达式、Hamcrest Matcher,并根据输入的类型适当地过滤列表。
我们目前使用的是isinstance(our_filter, hamcrest.matcher.Matcher),但这需要我们安装 Hamcrest。
我们正在考虑在inspect.getmro(type(POSSIBLE_MATCHER)) 上使用字符串匹配;但这感觉不干净。在 import 语句周围可能还有 try/except 选项。
最好的方法是什么?
在@dblslash 的帮助下,这是我目前为止最好的:
[x.__module__+"."+x.__name__ for x in inspect.getmro(type(POSSIBLE_MATCHER))]
['hamcrest.core.core.isequal.IsEqual', 'hamcrest.core.base_matcher.BaseMatcher', 'hamcrest.core.matcher.Matcher', 'hamcrest.core.selfdescribing.SelfDescribing', '__builtin__.object']
【问题讨论】:
-
我遇到了类似的问题,最终使用了
if str(data.__class__) == '<class 'somemodule.someclass'>:...。我不会使用 try/catch,因为它需要在第一次使用时导入模块,这在某些情况下会导致烦人的延迟如果您最终发现实际上不需要导入的模块,当然会占用内存,因为输入的类型不同。
标签: python class inspect hamcrest isinstance