如何导入方法包装类型?

罗明夫

我有一个库模块包装器,它以递归方式包装对象。我想确定对象是否具有类似函数的类型。我可以使用以下命令检查几乎所有类似于函数的对象:

inspect.isbuiltin(object=obj) or
inspect.isfunction(object=obj) or
inspect.ismethod(object=obj) or
inspect.ismethoddescriptor(object=obj)

问题是此代码未检测到某些绑定方法,例如:

s = "Hello, world!"
type(s.__add__)
# method-wrapper

我想我无法检查对象是否正在method-wrapper使用inspect模块。但是如何导入此类型?我没找到

现在,我的代码中有一个难看的骇客:

MethodWrapper = type(''.__add__)
isinstance(obj, MethodWrapper)

UPD0:

我不想使用callable因为它检测实现的类和对象__call__,但是我希望这些类和对象分别处理。

戴维斯鲱鱼

types模块提供了名称为众多“执行”类型,其中包括几个用C实现的具体功能。例如type("".__str__)MethodWrapperType在CPython的3.7刚刚添加。

由于此区域很细微,类型数量很多,因此callable实际上可能是最佳选择。您可以轻松地type首先检查对象以“排除”类,并且可以使用各种启发式方法(例如try调用vars对象或检查type(x).__module__)来识别典型的“可调用对象”(不是那些与内置对象根本不同的对象)功能类型)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章