检查方法是否在基类或派生类中定义

时间:2019-05-21 19:15:45

标签: python python-2.7 inheritance

我想要一个函数来告诉我test是基类的原始版本还是派生类中实现的新版本。我发现inspect.getfullargspec可以解决我的问题,但不适用于我的情况所需的Python 3。

class base_class(object):
    @staticmethod 
    def test(a, b, c):
        pass

class child_class(base_class):
    @staticmethod
    def test(a, b):
        pass 

class child_class_2(base_class):
    pass

1 个答案:

答案 0 :(得分:3)

您不需要进行任何花哨的检查:

>>> x = child_class_2()                                                     
>>> x.test                                                                  
<function base_class.test at 0x7fea1a07f7b8>

>>> y = child_class()                                                       
>>> y.test                                                                  
<function child_class.test at 0x7fea1a07f950>

默认情况下,打印名称来自该函数的__qualname__属性:

>>> x.test.__qualname__
base_class.test
>>> y.test.__qualname__
child_class.test

一种获取类名的方法很简单

x.test.__qualname__[:-len(x.test.__name__) - 1]