gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 20:36:43 25 4
gpt4 key购买 nike

我正在尝试设计我的代码,在一个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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com