2010-01-07 221 views
1
class SortedDict(dict): 
    def __init__(self, data=None): 
     if data is None: 
      data = {} 
     super(SortedDict, self).__init__(data) 

這兩個類有什麼區別?

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

我認爲他們是相同的。

回答

5

dict(data)只是創建一個字典從data,而不會有任何結果保存。 另一方面調用父類的構造函數。

另外,在多繼承的情況下,使用super可確保所有正確的構造函數都按正確的順序調用。使用None作爲默認參數而不是可變的{}確保那些其他構造函數don't accidentally modify SortedDicts default argument

1

第一類似乎並沒有工作

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'}