我正在阅读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
现在Customers
是class 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
吗?因为我们在这里没有添加任何新内容。答案 0 :(得分:2)
该课程不仅仅是dict
;它也支持键的属性访问,因为它将所有字典访问委托给包含所有属性的实例__dict__
属性。
演示:
>>> c = Customers()
>>> c.foo = 'bar'
>>> c
{'foo': 'bar'}
>>> c['foo']
'bar'
你不能用常规字典做到这一点。您找到的实现是这个问题的答案的相当精细的版本:VirtualBox documentation