2010-01-07 7 views

Répondre

5

dict(data) crée juste un dictionnaire de data sans enregistrer le résultat partout. D'autre part, appelle le constructeur de la classe parent.

En outre, dans le cas d'un héritage multiple, l'utilisation de super garantit que tous les bons constructeurs sont appelés dans le bon ordre. L'utilisation de None comme argument par défaut au lieu d'un mutable {} garantit que ces autres constructeurs sont don't accidentally modify SortedDicts default argument.

1

La première classe ne semble pas fonctionner

class SortedDict2(dict): 
    def __init__(self, data={}): 
     dict(data) 

class SortedDict(dict): 
    def __init__(self, data=None): 
     if data is None: 
      data = {} 
     super(SortedDict, self).__init__(data) 



x = SortedDict2("bleh") 
y = SortedDict({1: 'blah'}) 

print x 
print y 

File "rere.py", line 3, in __init__ 
dict(data) 
ValueError: dictionary update sequence element #0 has length 1; 2 is required 


x = SortedDict2({1: "bleh"}) 
y = SortedDict({1: 'blah'}) 

print x 
print y 

>> {} 
>>{1: 'blah'} 
Questions connexes