如何根据传入的可调用类型进行调度?

问题描述 投票:0回答:0

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()

如何根据可调用类型进行调度?

python python-3.x dispatch
© www.soinside.com 2019 - 2024. All rights reserved.