gpt4 book ai didi

python - 多重继承 : only 1 parent init'd

转载 作者:太空宇宙 更新时间:2023-11-04 01:22:52 24 4
gpt4 key购买 nike

<分区>

我不明白为什么在下面的代码中只有一个父构造函数被初始化:

class Base(object):
def __init__(self):
print "Base::Base():"


class BaseWArgs(object):
def __init__(self, arg):
print "BaseWArgs::BaseWArgs(%s):" % arg


class Composite(Base, BaseWArgs):
def __init__(self):
super(Composite,self).__init__()

在这种情况下,只会调用 Base.init()。如果我切换继承参数的顺序,则只会初始化 whatever-stands-first 类:

class Composite(BaseWArgs, Base):
def __init__(self):
super(Composite,self).__init__('myArg')

我如何通过一次调用初始化两个 parent ?这不应该是 super() 的责任吗?

编辑我认为我的用例是多重继承的特例。我想使用 defaultdict 作为基本类型创建一个项目,但从第三种类型继承一些额外的功能。

from collections import defaultdict

class Base(object):
def __init__(self):
print "Base::Base():"
super(Base,self).__init__()
self.val = 'hello world'

class Item(defaultdict, Base):
def __init__(self):
super(Item,self).__init__(int)

>>> Item()
defaultdict(<type 'int'>, {})

>>> Item().val
Traceback (most recent call last):
File "<pyshell#77>", line 1, in <module>
Item().val
AttributeError: 'Item' object has no attribute 'val'

Base::Base() 在哪里丢失?为什么 Base 没有初始化?

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