如何测试 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 都适用于多级继承和混合。
我有一个子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 都适用于多级继承和混合。