跨越代码,其中一个类扩展了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(self,...)在做什么?这与dict.get(key)方法类似吗?
当我们对这个类对象执行[]时,dict.get(self)会调用self.get()方法吗?
答案 0 :(得分:1)
在这种情况下,dict.get(self, key.title())
相当于super().get(key.title())
。它正在呼唤"原创" .get
类的dict
方法,但迫使key
成为" titlized"。
要理解为什么dict.get(self, key.title())
等同于super().get(key.title())
,请让我们看一下更简单的类:
class Foo:
def bar(self):
print('bar')
现在,调用Foo().bar()
与调用Foo.bar(Foo())
相同。这与没有继承的情况基本相同。