gpt4 book ai didi

python - 类型错误 : multiple bases have instance lay-out conflict

转载 作者:太空狗 更新时间:2023-10-29 18:01:59 28 4
gpt4 key购买 nike

我想用两个类创建一个类:collections.OrderedDictcollections.DefaultDict。这样我就可以得到一个有序的字典,并为正在访问的不存在的键设置一个默认值。有哪些方法可以做到这一点?

我的解决方案是围绕我上面提到的 2 个类创建另一个类。我认为由于每个类中的方法具有相同的名称而导致错误?

from collections import defaultdict, OrderedDict
class owndic(OrderedDict, defaultdict):
pass

生产

TypeError: multiple bases have instance lay-out conflict

干杯!

最佳答案

Instance lay-out conflict 是一种奇特的说法,表示您正试图从多个(在本例中为内置)类型继承,这些类型不能很好地相互协作。从技术上讲,这些类在其通用属性的功能上存在冲突。

在这种情况下,OrderedDictdefaultdict 都是两个类似字典的类型,具有它们自己独特的 __setitem__ 属性以及不同的处理方式键和值。

在 C 级别,当 best_base函数无法计算多个基类中的最佳基类。有多种其他原因可能导致此函数无法计算最佳基地或其他基地中的获胜者,但在这种情况下,当以下情况均未发生时会发生错误。 winner 不是 None,winner 不是 candidate* 的子类型,candidate不是 winner 的子类型。

candidate = solid_base(base_i);
if (winner == NULL) {
winner = candidate;
base = base_i;
}
else if (PyType_IsSubtype(winner, candidate))
;
else if (PyType_IsSubtype(candidate, winner)) {
winner = candidate;
base = base_i;
}
else {
PyErr_SetString(
PyExc_TypeError,
"multiple bases have "
"instance lay-out conflict");
return NULL;

}

但是,如果您想同时受益于 defaultdict()OrderedDict() 的功能,您可以简单地使用 OrderedDict及其内置的 setdefault 属性。

这是一个例子:

In [13]: d = OrderedDict()

In [14]: for i, j in enumerate(['k', 'r', 'k', 'j', 'j', 't']):
d.setdefault(j, []).append(i)
....:

In [15]: d
Out[15]: OrderedDict([('k', [0, 2]), ('r', [1]), ('j', [3, 4]), ('t', [5])])

<子>* `candidate` 是 `base_i` 的实体基础,传递给类调用者的基础之一,使用 [`solid_base`](https://github.com/python/cpython/blob/ce5b0e9db1b9698e6ffc43ae41cf3a22ca5a6ba6/Objects 计算/typeobject.c#L2086) 函数。

关于python - 类型错误 : multiple bases have instance lay-out conflict,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48136025/

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