为什么Python中的dict类需要重写

时间:2016-01-10 01:33:25

标签: python class oop inheritance dictionary

我正在阅读banking application的源代码,而class Bank(object): """ the bank class contains all the bank operations """ def __init__(self, name): """ instantiate the class """ self.name = str(name) self.customers = Customers() 类定义如下:

self.customers

现在Customersclass Customers(dict): """ the customers class extends the dictionary object """ def __setitem__(self, key, item): self.__dict__[key] = item def __getitem__(self, key): return self.__dict__[key] def __repr__(self): return repr(self.__dict__) def __len__(self): return len(self.__dict__) def __delitem__(self, key): del self.__dict__[key] def keys(self): return self.__dict__.keys() def values(self): return self.__dict__.values() def __cmp__(self, dict): return cmp(self.__dict__, dict) def __contains__(self, item): return item in self.__dict__ def add(self, key, value): self.__dict__[key] = value def __iter__(self): return iter(self.__dict__) def __call__(self): return self.__dict__ def __unicode__(self): return unicode(repr(self.__dict__)) 类的另一个实例,定义如下:

override a function
  • 根据我的理解,当添加新功能或从上一个功能更改其行为时,我们overriding。为什么我们dict Customer self.customers = dict()类中的Main函数。我们不能简单地使用Program吗?因为我们在这里没有添加任何新内容。

1 个答案:

答案 0 :(得分:2)

该课程不仅仅是dict;它也支持键的属性访问,因为它将所有字典访问委托给包含所有属性的实例__dict__属性。

演示:

>>> c = Customers()
>>> c.foo = 'bar'
>>> c
{'foo': 'bar'}
>>> c['foo']
'bar'

你不能用常规字典做到这一点。您找到的实现是这个问题的答案的相当精细的版本:VirtualBox documentation