如何导入方法包装器类型?
How to import method-wrapper type?
我有一个递归包装对象的库 module-wrapper。我想确定一个对象是否具有类函数类型。我可以使用以下方法检查几乎所有类似函数的对象:
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
我想我无法使用 inspect
模块检查对象是否为 method-wrapper
。但是我该如何导入这种类型呢?我没找到。
现在我的代码中有一个丑陋的 hack:
MethodWrapper = type(''.__add__)
isinstance(obj, MethodWrapper)
UPD0:
我不想使用 callable
,因为它检测到 类 和实现 __call__
的对象,但我希望处理那些 类 和对象分开。
types
模块为许多“实现”类型提供名称,包括几个用 C 实现的函数。type("".__str__)
、MethodWrapperType
的具体示例刚刚添加到 CPython 中3.7.
因为这个区域比较隐蔽,种类较多,所以callable
可能真的是最好的选择。您可以轻松地首先检查 type
个对象以“排除”类,以及各种启发式方法( 例如 ,try
调用 vars
在对象上或检查 type(x).__module__
) 可用于识别典型的“可调用对象”(并不是说它们与内置函数类型根本不同)。
我有一个递归包装对象的库 module-wrapper。我想确定一个对象是否具有类函数类型。我可以使用以下方法检查几乎所有类似函数的对象:
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
我想我无法使用 inspect
模块检查对象是否为 method-wrapper
。但是我该如何导入这种类型呢?我没找到。
现在我的代码中有一个丑陋的 hack:
MethodWrapper = type(''.__add__)
isinstance(obj, MethodWrapper)
UPD0:
我不想使用 callable
,因为它检测到 类 和实现 __call__
的对象,但我希望处理那些 类 和对象分开。
types
模块为许多“实现”类型提供名称,包括几个用 C 实现的函数。type("".__str__)
、MethodWrapperType
的具体示例刚刚添加到 CPython 中3.7.
因为这个区域比较隐蔽,种类较多,所以callable
可能真的是最好的选择。您可以轻松地首先检查 type
个对象以“排除”类,以及各种启发式方法( 例如 ,try
调用 vars
在对象上或检查 type(x).__module__
) 可用于识别典型的“可调用对象”(并不是说它们与内置函数类型根本不同)。