我想在Python中覆盖类dict
的方法,一个简单的方法:update
。假设我要创建一个与标准MyDict
相同的dict
类,除了可以使用必须包含至少10个元素的dict
进行更新。
所以我会继续:
def update(self, newdict):
if len(newdict) <= 10: raise Exception
self.update(newdict)
但是在对update
的内部调用中,很明显Python调用了重写函数而不是原始函数。除了简单地更改函数名称之外,有没有办法避免这种情况?
答案 0 :(得分:4)
您需要在超类上调用update
,将子类的实例提供为self
。
def update(self, newdict):
if len(newdict) <= 10: raise Exception
dict.update(self, newdict)
您还可以使用super()
在运行时确定超类:
def update(self, newdict):
if len(newdict) <= 10: raise Exception
super(MyDict, self).update(newdict)
在Python 3中,您可以省略super()
的参数:
def update(self, newdict):
if len(newdict) <= 10: raise Exception
super().update(newdict)
答案 1 :(得分:0)
你是从 dict 类继承的吗?使用超级功能
super(MyDict, self).update
应该做的伎俩