使用此代码:
class MyDict(dict):
def __setitem__(self, k, v):
print 'assignment', k, v
self.__dict__[k] = v
nsg = MyDict()
nsg["b"] = 123
print "G is: ", nsg
打印
assignment b 123
G is: {}
如果我添加
def __str__(self):
return self.__dict__.__str__()
它有效:
assignment b 123
G is: {'b': 123}
同样,如果我打印G["b"]
,我会收到KeyError,除非__getitem__(self)
返回self.__dict__[k]
。
为什么不会自动找到父类dict
,如__str__
和__getitem__
?
答案 0 :(得分:4)
dict
对象不会在__dict__
属性中存储键和值;怎么可能呢,因为__dict__
属性本身就是一个dict
对象!
使用重写的__setitem__
方法添加到字典中;最佳做法是使用super()
查找原始方法:
class MyDict(dict):
def __setitem__(self, k, v):
print 'assignment', k, v
super(MyDict, self).__setitem__(k, v)
您还可以使用未绑定的dict.__setitem__
方法:
class MyDict(dict):
def __setitem__(self, k, v):
print 'assignment', k, v
dict.__setitem__(self, k, v)
除了硬编码方法而不是自定义myDict
类的len子类注入另一个中间__setitem__
方法。