2017-08-10 34 views
-1

在擴展Dict類並覆蓋方法的類中找到代碼。dict.get(self,key)在擴展python的類中是什麼Dict

下面的代碼片段是我無法理解:

class HeaderKeyDict(dict): 
""" 
A dict that title-cases all keys on the way in, so as to be 
case-insensitive. 
""" 
    # More methods 

    def __getitem__(self, key): 
     return dict.get(self, key.title()) 

    def get(self, key, default=None): 
     return dict.get(self, key.title(), default) 

    # More methods 

什麼是困惑我是什麼,是dict.get(個體經營,...)在做什麼?這與dict.get(key)方法類似嗎?

當我們在這個類對象上執行[]時,dict.get(self)會調用self.get()方法嗎?

+0

它簡單地覆蓋了'dict'這個特殊風格的'.get'方法(繼承自'dict')。唯一的區別是默認值('key.title()') –

+1

@ Ev.Kounis默認值仍然是None。不同的是關鍵將獲得資本。 – DeepSpace

+0

標題大小寫是一種讓大小寫不敏感的奇怪方式。 –

回答

1

在這種情況下dict.get(self, key.title())相當於super().get(key.title())。它調用dict類的「原始」.get方法,但強制key被「標定」。

要理解爲什麼dict.get(self, key.title())相當於super().get(key.title())讓我們看一個簡單的類:

class Foo: 
    def bar(self): 
     print('bar') 

現在,調用Foo().bar()是與調用Foo.bar(Foo())。這與你沒有繼承的情況下的情況基本相同。

+0

謝謝。我發佈這個問題後,發現類似的Q/A列表https://stackoverflow.com/questions/4093029/how-to-inherit-and-extend-a-list-object-in-python – mittal

+0

我從來沒有在'dict.get(self)'之前看過這樣的調用,這讓我感到困惑 – mittal

相關問題