gpt4 book ai didi

python - 从 Python 中的实例复制构造基类

转载 作者:行者123 更新时间:2023-11-28 18:43:08 26 4
gpt4 key购买 nike

考虑以下代码:

class ABC:
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c

class ABCD(ABC):
def __init__(self, abc, d):
# How to initialize the base class with abc in here?
self.d = d

abc = ABC(1, 2, 3)
abcd = ABCD(abc, 4)
print(abcd.a)

abc 初始化基类的 Pythonic 方式是什么?如果我用

super().__init__(abc.a, abc.b, abc.c)

每次向 ABC 添加内容时,我都必须更改 ABCD。我能做的就是使用

self.__dict__.update(abc.__dict__)

但是,当 ABC 使用与 dict 不同的底层实现(例如 __slots__)时,这感觉很笨拙并且会中断。有其他替代方法吗?

最佳答案

如果将 abc 类型的对象传递给构造函数,也许您应该将 abc 作为字段而不是继承。

例如也许:

class ABC:
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c

class ABCD:
def __init__(self, abc, d):
# How to initialize the base class with abc in here?
self.abc = abc

abc = ABC(1, 2, 3)
abcd = ABCD(abc, 4)
print(abcd.abc.a)

根据您的评论,我会编写复制 ABC 部分的方法。这样这个方法就是ABC的“责任”。

class ABC:
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c

def copy_init(other):
self.a = other.a
self.b = other.b
self.c = other.c

class ABCD(ABC):
def __init__(self, abc, d):
self.copy_init(abc)
self.d = d

关于python - 从 Python 中的实例复制构造基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23580357/

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