类型错误:多个基存在实例布局冲突

2024-10-02 00:34:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我想创建一个由两个组成的类:collections.OrderedDict和{}。这样我就可以得到一个有序的字典,并为正在访问的不存在的键设置一个默认值。有什么方法可以做到这一点?在

我的解决方案是围绕上面提到的两个类创建另一个类。这是一个错误,因为每个类中的方法都有相同的名称,我想?在

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

生产

^{pr2}$

干杯!在


Tags: 方法fromimport名称字典错误pass解决方案
1条回答
网友
1楼 · 发布于 2024-10-02 00:34:54

发生此异常是因为您试图从多个内置类型继承,这些类型在C级别上无法相互协作。这意味着这些类在其相似属性的功能上存在冲突。在本例中,OrderedDictdefaultdict都是两个类似字典的类型,它们有自己独特的__setitem__属性,并且处理键和值的方式也不同。在

在C级别,当^{}函数无法计算多个基类中的最佳基类时,就会发生此错误。还有许多其他原因可以导致此函数无法计算其他基数中的最佳基数或赢家,但在这种情况下,如果以下两种情况都不发生,则会发生错误。^{cd7>不是{cd5>子类型{cd5>不是{cd5>的子类型。在

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及其内置的setdefault属性。在

下面是一个例子:

^{pr2}$

*candidatebase_i的实基,它是传递给类调用方的基之一,使用^{}函数计算。

相关问题 更多 >

    热门问题