python - python中继承多个类无需多次初始化

标签 python oop

我正在尝试设计我的代码,在一个Python文件中包含多个类,其中类A是类C()D()<的抽象类,B 类也是 C()D() 类的父类。

正如您所看到的,我正在使用 super().__init__ 来初始化抽象类和父类,然后再执行这些类中的任何功能。

代码如下:

from abc import ABC, abstractmethod

class A(ABC):
    def __init__(self):
        print('Running A.__init__')

    @abstractmethod
    def function(self):
        pass

class B():
    def __init__(self):
        print('Running B.__init__')


class C(A,B):
    def __init__(self):
        print('Running C.__init__')
        # C.__init__()
        super(C, self).__init__()
        super(A,self).__init__()

    def function(self):
        pass

class D(A,B):
    def __init__(self):
        print('Running D.__init__')
        super(D,self).__init__()
        super(A, self).__init__()

    def function(self):
        pass


foo = C()
bar = D()

输出:

Running C.__init__
Running A.__init__
Running B.__init__
Running D.__init__
Running A.__init__
Running B.__init__

有兴趣学习如何避免多次初始化,简单来说,我希望抽象类 A 和父类 B 在执行 C()D() 之前初始化,其中C 和 D 将继承 A 和 B 的所有功能

foo = C()
bar = D()

Running A.__init__
Running B.__init__
Running C.__init__
Running D.__init__

我最近正在尝试学习OOPS概念,如果需要重新设计代码,请帮忙。谢谢

最佳答案

在 C 或 D 中运行初始化程序代码之前,您可以通过运行 super().__init__() 来初始化父类。

即使不调用初始化函数,C 和 D 仍会继承 A 和 B 的方法。

关于python - python中继承多个类无需多次初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57117765/

相关文章:

python json转储unicode错误

python - 有没有一种简单的方法来 "reload"对象的方法而不完全重新实例化它?

java - 一个类怎么会有自己类型的成员,这不是无限递归吗?

MATLAB:将继承的属性设置为只读

python - 导入过滤器 - 类型错误 : type() doesn't support MRO entry resolution

python - 搞乱了我的系统 python

python - find vs in string python 操作

java - 我应该@Deprecate 父类(super class)方法吗?

当涉及泛型(特别是 List)时,通过继承重用 Java 代码?

python - PIL 值错误 : Images do not match