我有一个库模块包装器,它以递归方式包装对象。我想确定对象是否具有类似函数的类型。我可以使用以下命令检查几乎所有类似于函数的对象:
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] 删除。
我来说两句