gpt4 book ai didi

python - 从父类初始化子类

转载 作者:行者123 更新时间:2023-11-28 22:25:14 30 4
gpt4 key购买 nike

假设我有一个将生成 O 对象的输入列表,格式如下:

inps = [['A', 5], ['B', 2]]

并且 O 有子类 A 和 B。A 和 B 每个都以一个整数开始——上面示例中的 5 或 2 —— 并且有一个方法 update(self, t),所以我认为将它们分组在 O 父类(super class)下是有意义的。我可以用一个循环来完成程序:

Os = []
for inp in inps:
if inp[0] == 'A':
Os.append(A(inp[1]))
elif inp[0] == 'B':
Os.append(B(inp[1]))

然后在运行时,

for O in Os: O.update(t)

不过,我想知道是否有更面向对象的方法来完成此任务。我想,一种方法可能是在 O 类之外制作一个假的“O 构造函数”:

def initO(inp):
if inp[0] == 'A':
return A(inp[1])
elif inp[0] == 'B':
return B(inp[1])

Os = [initO(inp) for inp in inps]

在我看来,这更优雅,并且对于所有密集的目的来说,都能给我想要的结果;但感觉完全是在滥用 python 中的类系统。有没有更好的方法来做到这一点,也许是通过从 O 构造函数启动 A 和 B?

编辑:理想的情况是能够使用

Os = [O(inp) for inp in inps]

同时将 O 保持为 A 和 B 的父类(super class)。

最佳答案

你可以使用 dict将名称映射到实际类:

dct = {'A': A, 'B': B}

[dct[name](argument) for name, argument in inps]

或者如果你不想要列表理解:

dct = {'A': A, 'B': B}
Os = []
for inp in inps:
cls = dct[inp[0]]
Os.append(cls(inp[1]))

关于python - 从父类初始化子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45651512/

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