我有一种情况,基类方法(Python中的__init__
方法)做了很多工作。派生类覆盖__init__
以简单地设置对象变量,然后委托给基类__init__
。这工作正常,但现在我有一种情况。所有派生类都使用的基类方法除了一个
我有一些代码,非常适合在基类__init__
,所有其他派生类除了一个(称之为A
)需要使用。想象一下,如果基类__init__
是这样的。
def __init__(self):
Action 1...
Action 2...
现在,所有的派生类直接委托给这个。但是,A
应该只有行动2在其__init__
。现在这个观点很难看。我可以将Action 1和Action 2分成两个独立的函数,并让基类简单地调用Action2
。然后大多数类会有他们的init这样的东西。
def __init__(self):
self.Action1()
Other init code...
super().__init__()
和A
类,这将是
def __init__(self):
Some init code....
super().__init__()
但是你可以看到,有一段代码(调用self.Action1
说)我在最派生类的重复。这不好。我不确定如何用最少的重复代码优雅地编写代码,并且需要一些关于如何去做的建议。
典型的回答是_maybe A不是一个子类really_。考虑把A作为父类(在层次结构中更高,而不是更低) – Aganju
在调用super()函数后''''''''''''你可以*撤销*''' )'''? – wwii
@Aganju A是一个孩子。基类包含很多通用代码。子类实现了一些方法,使它们适合更大的框架。 –