python 有许多不同的可调用对象。
除了
object
之外,所有不同的可调用对象都共享一个共同的基类。
我如何根据可调用对象的类型进行调度?
下面,我们创建了一些不同的可调用对象:
class KlausTheKlass:
@classmethod
def cm(cls):
pass
@staticmethod
def sm(cls):
pass
def im(self):
pass
########################################
lamby = lambda *args: None
########################################
def foobar(*args):
pass
注意以下事项:
对象 | 类型(对象)。名称 |
---|---|
type.call | 方法包装器 |
拉链 | 类型 |
KlausTheKlass.sm | 功能 |
KlausTheKlass.cm | 方法 |
变量 | builtin_function_or_method |
lambda *args:无 | 功能 |
我希望使用
functools.singledispatchmethod
根据传入的可调用对象来装饰一个方法,但是有些类名是无效的。
import functools
class K:
@functools.singledispatchmethod
def m(*args):
print("root")
@m.register
def m_from_function(self, f:function):
print('function')
@m.register
def m_from_method(self, m:method):
print('method')
obj = K()
obj.m()
如何根据可调用类型进行调度?