我的__init__中的for循环未按预期运行

时间:2019-11-18 01:56:09

标签: python python-3.x class for-loop

    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时得到三个键?

2 个答案:

答案 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" ]