Je suis entrain de lire le chapitre sur l'heritage des dictionnaires de Dive into Python : http://python.developpez.com/cours/D...ss_methods.php
Et ne comprenant pas très bien comment cela cherche j'ai écrit ce bout de code pour essayer de mieux comprendre. Cuisante échec j'ai plein d'erreur que je ne suis pas sur de comprendre donc je m'en remet à vous :
Code python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 class A(dict): def __init__(self, name=None, genre=None) : self["name"] = name self.genre=genre class B(A): def __init__(self, name=None, genre=None) : A.__init__(name, genre) def __setitem__(self, key, item): self.data[key] = item def __getitem__(self, key): return self.data[key]
Resultat :
Code console : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 >>> from test_dict_class import A, B >>> a = A("rolling stones", "rock") >>> a["genre"] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'genre' >>> a.genre 'rock' >>> a["name"] 'rolling stones' >>> a.name Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'A' object has no attribute 'name'
Je suis étonné qu'il n'y a pas de correspondance entre un attribut de l'objet. Enfin jusque là ça va. C'est ensuite que ça se complique :
Code console : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 >>> b = B("beatles", "pop") Traceback (most recent call last): File "<stdin>", line 1, in <module> File "test_dict_class.py", line 10, in __init__ A.__init__(self, name, genre) File "test_dict_class.py", line 4, in __init__ self["name"] = name File "test_dict_class.py", line 13, in __setitem__ self.data[key] = item AttributeError: 'B' object has no attribute 'data'
Pourquoi ligne 4 mon __init__ n'est pas bon ? Pourquoi ligne 6 il n’arrive pas à faire self["name"]=name alors que précédemment il n’y avait aucun problème ? Pourquoi mon objet n'a pas d'attribut data (c'est ce qui est marqué dans le cours) ? (quand je remplace self.data[key] par self[key] c'est encore pire)
Partager