如何在Python中调用子类对象的未绑定方法

时间:2017-06-08 23:38:18

标签: python inheritance reflection

我在Python 2.7中有以下类:

class Parent():
    def some_method(self):
        do_something()

class Child(Parent):
    def some_method(self):
        do_something_different()

假设我有一堆对象要运行some_method。我执行以下行(前两个是为了这个例子):

c = Child()
m = Parent.some_method

m(c)  # do_something() gets called

是否有一些构造使得在最后一行do_something_different()被调用而不使用任何关于Child的信息(因为我可能有很多这样的类继承自Parent)?< / p>

1 个答案:

答案 0 :(得分:4)

使用operator.methodcaller

,而不是使用未绑定的方法对象
import operator

m = operator.methodcaller('some_method')

m(c)

这会查找对象的实际some_method方法并调用它。它的成本更高,但是额外的时间都花在做你需要的东西上。