我想研究图形,所以我写了一个简单的类Graph,它有一个 g_map 变量,它以字典的形式存储图形本身,如下所示:
class Graph:
g_map = dict()
...
Не очень важно сейчас
...
def __init__(self, g):
self.g_map = g
a = Graph({'a': {'a': 1, 'b': 1, 'c':12, 'd': 31, 'e': 19},
'b': {'a': 1, 'b': 32, 'c':2, 'd': 31, 'e': 19},
'c': {'a': 12, 'b': 2, 'c':0, 'd': 12, 'e': 19},
'd': {'a': 31, 'b': 31, 'c':12, 'd': 0, 'e': 31},
'e': {'a': 19, 'b': 19, 'c':19, 'd': 31, 'e': 0}
})
这样我可以按名称存储顶点,并调用它们
(此处在字典中为每个键(峰的名称)存储一个字典,其中每个键(再次是峰的名称)存储到该峰的道路长度的值)
我希望能够像这样引用图表:
print(a['a']['c'])
# вернет 12
为此,Graph我在课堂上实现了方法:
def __getitem__(self, item):
else:
return self.g_map[item]
def __setitem__(self, key, value):
self.g_map[key] = value
def __len__(self):
return len(self.g)
这段代码工作正常,但我希望能够做这样的事情:dict(a)本质上会返回g_map
并且list(a)将以相同的方式工作,list(dict(какой-то словарь))即返回所有键的列表。也就是说,对于本例中的 list(a) 返回['a', 'b', 'c', 'd', 'e']
我以为有类似__list__,的方法__dict__,但事实证明没有,我请求你的帮助:
如何实现我需要的行为?
为了让 dict 和 list 方法在你的对象上工作,你需要实现
__iter__,__getitem__和methodskeys。以一种简单的方式,它可以像这样完成:你可以尝试对继承做同样的事情。