使用parentclass方法和child实例,调用最具体的方法(child的方法)

Using parent class method and child instance, call the most concrete method (child's method)

考虑这段代码:

class Interface():
    def my_method(self, a):
        print(f"Interface: {a=}")

class ChildA(Interface):
    def my_method(self, a):
        print(f"ChildA test: {a=}")

method = Interface.my_method
my_instance = ChildA()

method(my_instance, a=4)

这会打印 Interface: a=42。我怎样才能让它打印 ChildA: a=42?

显然我不想使用 ChildA.my_method,我想要一个适用于未来实施的任何新 child 类 的解决方案。

你能做的最好的就是写一个辅助函数:

def methodcaller(name):
    def inner(obj, *args, **kwargs):
        return getattr(obj, name)(*args, **kwargs)
    return inner

method = methodcaller('my_method')
不幸的是,

知道方法名称和对象将是 Interface 的实例这一事实并不能让您提前执行方法解析的任何部分。您需要提前了解具体的 class。 (此外,operator.methodcaller 不起作用,因为它要求在创建方法调用程序时提供所有方法参数。)