class DictionnaireOrdonne:
"""Classe permettant de créer un dictionnaire ordonné comme une liste, avec des indices"""
def __init__(self, **keys_values):
"""classe prennent un nombre indéfinit de paramètres nommées"""
self.keys_values = keys_values
self._dictionnaire = self.keys_values
for keys in self.keys_values:
self.keys = keys
def __repr__(self):
"""Cette méthode est appelée quand on appelle l'objet"""
return str(self.keys_values)
def __getitem__(self, key):
"""Cette méthode spéciale est appelée quand on fait objet[index]
Elle redirige vers self._dictionnaire[index]"""
return self._dictionnaire[key]
def __setitem__(self, key, value):
"""Cette méthode est appelée quand on écrit objet[index] = valeur
On redirige vers self._dictionnaire[index] = valeur"""
self._dictionnaire[key] = value
test = DictionnaireOrdonne(one=1, two=2, three=3)
print(test.keys)
运行此代码时,我得到:
three
我只得到这三个键之一,而这是最后一个,我不知道为什么。
但是,如果我将for循环修改为此:
for keys in self.keys_values:
print(keys)
然后我得到:
one
two
three
我想要得到输出,但是我不能使用它,因为它会在不调用它的情况下自动打印。
为什么在第一个示例中我只得到一个键,如何才能使它在调用test.keys
时得到三个键?
答案 0 :(得分:1)
更改下面__init__
中的代码:
for keys in self.keys_values:
self.keys = keys
收件人:
self.keys = self.keys_values
答案 1 :(得分:0)
仔细查看您要让for循环执行的操作:
for keys in self.keys_values:
self.keys = keys
不是附加到列表或任何类似内容,而是用keys
中的最新对象替换keys_values
值。
坦白说,您实际上根本不需要for循环。只需将 self.keys
设置为self.keys_values
,就可以按照您想要的方式工作。
编辑:
为了将**keys_values
转换为键列表,请使用list()
self.keys = list(self.keys_values.keys()) # converts the keys into a list
# later on
print(keys) # [ "one", "two", "three" ]