好吧,假设我有一个名为Tab的类,该类有一个方法,它接收字典的键和值,并使其成为一个庞大的字典。
class Tab():
def __init__(self):
if not 'table' in dir(self):
self._table = {}
def add_table(self, key, value):
self._table[key] = value
现在,如果我有一个功能和字典
dic = {'A': ['A', 'B','C'], 'B':['D', 'E','F']}
def read_table():
table = Tab()
for key in dic:
table.add_table(key, dic[key])
return table
test = read_table()
如果我要运行它,它会运行正常,但如果我这样做,
new_test = test['A']
会崩溃。我知道我可以通过将对象转换回字典来解决这个问题,但我需要将类型作为Tab类(我之前定义的那个)。
我该怎么做?
答案 0 :(得分:2)
要使Tab
实例的行为与字典相似,您可以覆盖__getitem__(self, item)
类中的__setitem__(self, key, value)
,__repr__(self)
和Tab
方法:
class Tab():
def __init__(self):
if not 'table' in dir(self):
self._table = {}
def add_table(self, key, value):
self._table[key] = value
def __getitem__(self, item):
return self._table[item]
def __setitem__(self, key, value):
self._table[key] = value
def __repr__(self):
return self._table.__repr__()
dic = {'A': ['A', 'B','C'], 'B':['D', 'E','F']}
...
# read_table() function declaration (omitted)
...
test = read_table()
new_test = test['A'] # accessing dict element
test['C'] = ['G','H','I'] # setting a new dict element
print(new_test)
print(test) # printing Tab instance as a dict
print(type(test))
输出(顺序):
['A', 'B', 'C']
{'B': ['D', 'E', 'F'], 'A': ['A', 'B', 'C'], 'C': ['G', 'H', 'I']}
<class '__main__.Tab'>
答案 1 :(得分:0)
为什么你过于复杂化?为什么不继承dict
对象,并使用update
方法。
甚至可以更好地从UserDict
模块继承collections
。
from collections import UserDict
class Tab(UserDict):
pass
dic = {'A': ['A', 'B','C'], 'B':['D', 'E','F']}
def read_table(dic):
table = Tab()
table.update(dic)
return table
read_table(dic).data['A']
最好在read_table
函数中传递obj。