跳过超类__init__的一部分?

Adm*_*VII 1 python inheritance

我有一个班级又一个班级。我想跳过初始化过程的一部分,例如:

class Parent:
    __init__(self, a, b, c, ...):
        # part I want to keep:
        self.a = a
        self.b = b
        self.c = c
        ...
        # part I want to skip, which is memory and time consuming
        # but unnecessary for the subclass:
        self.Q = AnotherClass()

class Child(Parent):
    __init__(self):
        #a part of the parent initialization process, then other stuff
Run Code Online (Sandbox Code Playgroud)

我提出的两个解决方案是:

  • 将一个抽象类作为该类的父Parent类,该类不包含Child,或初始化的不需要部分
  • 仅复制我要在子级中进行的父级初始化的部分

哪个最好,或者有更好的方法?

Łuk*_*ski 6

如何将创建的包装包装Q到私有方法中,并在子类中覆盖该方法呢?

class Parent:
    def __init__(self, a, b, c, ...):
        # part I want to keep:
        self.a = a
        self.b = b
        self.c = c
        self._init_q()

    def _init_q():
        self.Q = AnotherClass()

class Child(Parent):
    def _init_q(self):
        pass  # do not init q when creating subclass
Run Code Online (Sandbox Code Playgroud)

这不是最干净的方法,因为如果Child不需要Q它,则不应该将其作为Parent的子级,或者AnotherClass放错了位置(也许应该将其注入需要它的方法中),但是它可以解决您的问题而无需更改任何类接口。