Python 不导入候选项的isinstance

Python 不导入候选项的isinstance,python,class,inspect,hamcrest,isinstance,Python,Class,Inspect,Hamcrest,Isinstance,我们有一个函数,它接受各种不同类型的输入:一个函数、一个字符串、一个编译的正则表达式、一个表达式,并根据输入的类型适当地过滤列表 我们目前正在使用isinstance(我们的_过滤器,hamcrest.matcher.matcher),但这需要我们安装hamcrest 我们正在考虑在inspect.getmro(type(可能的匹配器))上使用字符串匹配;但这感觉不干净。除了import语句周围的之外,还可能有使用try/的选项 最好的方法是什么 在@dblslash的帮助下,这是迄今为止我得

我们有一个函数,它接受各种不同类型的输入:一个函数、一个字符串、一个编译的正则表达式、一个表达式,并根据输入的类型适当地过滤列表

我们目前正在使用
isinstance(我们的_过滤器,hamcrest.matcher.matcher)
,但这需要我们安装hamcrest

我们正在考虑在
inspect.getmro(type(可能的匹配器))
上使用字符串匹配;但这感觉不干净。除了import语句周围的之外,还可能有使用
try
/
的选项

最好的方法是什么


在@dblslash的帮助下,这是迄今为止我得到的最好的:

[x.\uuuuu模块\uuuuu+“+x.\uuuu名称\uuuuuuuuuu.用于x in inspect.getmro(类型(可能的匹配器))]

['hamcrest.core.core.isequal.isequal','hamcrest.core.base\u matcher.BaseMatcher','hamcrest.core.matcher.matcher','hamcrest.core.selfdescription.selfdescription','uu内置对象']
使用
类型(可能的\u matcher).IMHO是一种非常优雅的类型检查解决方案,无需导入模块。

如果您想满足继承要求,请使用
类型(可能的匹配器)。\uuuuuuuuuu name\uuu
不会剪切它。然后可以对照继承链中的所有类型进行检查:

class\u字符串在[t.\u名称\u用于类型中的t(可能的\u匹配器)。\u mro\u]

我也有类似的问题,最后使用了
如果str(data.\uuuu class\uuuuu)==':
。。。。我不会使用try/catch,因为它需要在第一次使用时导入模块,在某些情况下,这可能会导致恼人的延迟,当然,如果您最终发现您实际上不需要导入的模块,因为输入是不同类型的,则会占用内存。