如何在覆盖方法时调用它
How to call a method while overriding it
我有以下 class 层次结构:
class AbstractClass(object):
__metaclass__ = ABCMeta
@abstractmethod
def foo(self):
pass
class A(AbstractClass):
def __init__():
super().__init__()
def foo(self):
//Logic
class B(A):
def __init__():
super().__init__()
我想使用在 A 中实现的 foo,所以我不能在 B 中覆盖它。
使用 B.foo() 有效,但我仍然收到来自 PyCharm:
的警告
"Class B must implement all abstract methods"
我是否必须重写一个已经重写了抽象方法的方法?如何在不丢失实现的情况下覆盖它?只需将方法复制到子 class?
我正要问这个问题,突然想到它是如何工作的。我以为 "how I can call a method after I just overrode it?"
想了想终于想通了。
从父类 class 调用被覆盖的方法,同时在子类 class 中覆盖它:
class B(A):
def __init__():
super().__init__()
def foo(self):
super().foo()
之所以可行,是因为超类型方法必须与其子类型一起使用,而无需提供进一步的实现。在我弄清楚之后,它看起来很合乎逻辑。
这可能对刚刚了解继承如何工作的人有用。
我有以下 class 层次结构:
class AbstractClass(object):
__metaclass__ = ABCMeta
@abstractmethod
def foo(self):
pass
class A(AbstractClass):
def __init__():
super().__init__()
def foo(self):
//Logic
class B(A):
def __init__():
super().__init__()
我想使用在 A 中实现的 foo,所以我不能在 B 中覆盖它。 使用 B.foo() 有效,但我仍然收到来自 PyCharm:
的警告"Class B must implement all abstract methods"
我是否必须重写一个已经重写了抽象方法的方法?如何在不丢失实现的情况下覆盖它?只需将方法复制到子 class?
我正要问这个问题,突然想到它是如何工作的。我以为 "how I can call a method after I just overrode it?" 想了想终于想通了。
从父类 class 调用被覆盖的方法,同时在子类 class 中覆盖它:
class B(A):
def __init__():
super().__init__()
def foo(self):
super().foo()
之所以可行,是因为超类型方法必须与其子类型一起使用,而无需提供进一步的实现。在我弄清楚之后,它看起来很合乎逻辑。
这可能对刚刚了解继承如何工作的人有用。