KeyError:''u OrderedDict\uu root?

2024-10-02 20:40:31 发布

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

嗨,我有下面的代码片段,它给出了KeyError。我已经检查了指定make __init__ call to Ordered Dict的其他链接。但还是不走运。在

from collections import OrderedDict

class BaseExcelNode(OrderedDict):
    def __init__(self):
        super(BaseExcelNode, self).__init__()
        self.start_row = -1
        self.end_row = -1
        self.col_no = -1

    def __getattr__(self, name):
        return self[name]

    def __setattr__(self, name, value):
        self[name] = value
BaseExcelNode()

Error

^{pr2}$

Tags: to代码nameselfmakeinitvaluedef
2条回答

OrderedDict是在假定属性访问通过默认机制工作的前提下实现的,尤其是属性访问不等同于索引。在

当您将其子类化并更改属性访问的工作方式时,您打破了OrderedDict实现的一个最深刻的假设,一切都将走向地狱。在

使用猴子修补法:

from collections import OrderedDict

class BaseExcelNode(OrderedDict):
    def __init__(self):
        super(BaseExcelNode, self).__init__()
        self.start_row = -1
        self.end_row = -1
        self.col_no = -1

    def __getattr__(self, name):
        if not name.startswith('_'):
            return self[name]
        super(BaseExcelNode, self).__getattr__(name)

    def __setattr__(self, name, value):
        if not name.startswith('_'):
            self[name] = value
        else:
            super(BaseExcelNode, self).__setattr__(name, value)

b = BaseExcelNode()

相关问题 更多 >