2017-08-10 116 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

相关问题