Nik*_*war 6 python ordereddictionary
嗨,我有以下代码片段,它给出了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()
Run Code Online (Sandbox Code Playgroud)
Error:
Traceback (most recent call last):
File "CIMParser.py", line 29, in <module>
BaseExcelNode()
File "CIMParser.py", line 9, in __init__
super(BaseExcelNode, self).__init__()
File "C:\Python27\lib\collections.py", line 64, in __init__
self.__root
File "CIMParser.py", line 15, in __getattr__
return self[name]
KeyError: '_OrderedDict__root'
Run Code Online (Sandbox Code Playgroud)
使用猴子补丁方法:
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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
408 次 |
| 最近记录: |