【发布时间】:2021-11-10 14:26:24
【问题描述】:
我从子类 (bazz1 = super().foo(raw=raw, arg2=arg2, **kwargs)) 调用超类方法。在超类方法中,我再次调用了其他超类方法 (return bazz1 if raw else self.process(bazz1))。
在执行期间发生的事情是我没有预料到的。我定义了SuperClass 从def foo(...) 调用self.process(bazz1)。会发生什么而不是输入SuperClass.process(...),执行输入DerivedClass.process(...)。有没有办法明确防止这种情况发生?
class UltraClass(metaclass=ABCMeta):
def __init__(self, arg1):
super().__init__()
@abc.abstractmethod
def foo(self, **kwargs) -> bazz:
pass
@abc.abstractmethod
def bar(self, arg1, **kwargs) -> bazz:
pass
class SuperClass(UltraClass):
def __init__(self, arg1):
super().__init__(arg1)
def foo(self, raw, **kwargs) -> bazz:
...
bazz1 = get_bazz(...)
return bazz1 if raw else self.process(bazz1)
def process(self, bazz1, **kwargs) -> bazz:
return bazz1
class DerivedClass(SuperClass):
def __init__(self, arg1):
super().__init__(arg1)
def foo(self, raw, **kwargs) -> bazz:
...
bazz1 = super().foo(raw=raw, arg2=arg2, **kwargs)
return bazz1 if raw else self.process(bazz1)
def process(self, bazz1, **kwargs) -> bazz:
...
...
...
return bazz1
【问题讨论】:
-
您的声明
What happens in the execution time is that subclass method is called. What would be the correct way to call superclass method?不清楚。您能否详细说明您的意思。从哪里调用超类方法?你是如何在运行时调用函数的? -
另外,在您的代码中,
SuperClass不会继承自另一个类。 -
bazz1从哪里来,让SuperClass.foo返回? -
如果你的超类需要调用它自己版本的被覆盖的方法,那么你的类结构就有缺陷。你需要重新考虑你的设计。子类化的全部意义在于让子类处于控制之中。
标签: python oop prototypal-inheritance python-class