我有一个抽象类Base
,其中包含成员boolean do_thing
,该成员将在启动时触发一次性动作,或者不执行任何操作。派生类Derived
可以覆盖此变量,但是在super().__init__()
的{{1}}开头进行Derived
调用会导致一次性操作始终基于__init__
中设置的do_thing
。
我只看到两种解决方案,对我来说都不是理想选择:
在每个派生类的Base
的末尾而不是开始处调用super().__init__()
,这意味着我不能依赖__init__
中设置的其他默认变量。
在每个派生类的Base
的末尾显式调用一次性操作,这意味着重复的代码或__init__
中的一个附加函数只能在启动时调用
一些示例代码
Base
我是否有更好的方法来做到这一点?
答案 0 :(得分:1)
从您的描述看来,您的do_thing
功能与您的类有关,而与您的实例有关。如果是这样,将其作为__init__
的参数似乎并不正确。您还有其他选择,我会同意的
类属性
class Base:
_do_thing = False
def __init__(self):
if self._do_thing:
configuration.set(do_thing_parameters)
class Derived(Base):
_do_thing = True
class RegularDerived(Base):
pass
然后,您甚至不需要在子类中定义__init__
答案 1 :(得分:0)
尝试将“ do_thing”变量设置为默认参数,如下所示...
from abc import ABC
class Base(ABC):
def __init__(self, do_thing=False):
if do_thing:
configuration.set(do_thing_parameters)
class Derived(Base):
def __init__(self):
super().__init__(True)