如何测试 python class parent 是否定义了方法?

How to test if python class parent has method defined?

我有一个子class,它可能定义了一个方法'method_x'。我想知道 'method_x' 是否在 class 层次结构的其他地方定义。

如果我这样做:

hasattr(self, 'method_x')

我将得到一个真值,它还会查看为子class 定义的任何方法。我如何将其限制为仅查询该方法是否定义在 class 链的更高位置?

如果您正在使用 Python 3,您可以将 super() 提供给 hasattr 的对象参数。

例如:

class TestBase:
    def __init__(self):
        self.foo = 1

    def foo_printer(self):
        print(self.foo)


class TestChild(TestBase):
    def __init__(self):
        super().__init__()
        print(hasattr(super(), 'foo_printer'))

test = TestChild()

与 Python 2 类似,您只需要在 super() 调用中更加明确即可。

class TestBase(object):
    def __init__(self):
        self.foo = 1

    def foo_printer(self):
        print(self.foo)


class TestChild(TestBase):
    def __init__(self):
        super(TestChild, self).__init__()
        print(hasattr(super(TestChild, self), 'foo_printer'))


test = TestChild()

2 和 3 都适用于多级继承和混合。