提问人:whatyouhide 提问时间:1/7/2013 更新时间:1/8/2013 访问量:202
重写方法,而不会陷入无限递归
Overriding methods without falling into infinite recursion
问:
我想覆盖 Python 中类的方法,一个简单的方法:.假设我想创建一个与标准相同的类,只是可以使用必须包含至少 10 个元素的 s 来更新它。dict
update
MyDict
dict
dict
所以我会继续说:
def update(self, newdict):
if len(newdict) <= 10: raise Exception
self.update(newdict)
但是在内部调用中,显然 Python 调用的是被覆盖的函数,而不是原始函数。除了简单地更改函数名称之外,还有什么方法可以避免这种情况吗?update
答:
4赞
Mattie
1/8/2013
#1
您需要调用超类,以 .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)
0赞
volcano
1/8/2013
#2
你继承自 dict 类吗?使用超级函数
super(MyDict, self).update
应该可以解决问题
评论
0赞
volcano
1/8/2013
我可能会这样做,但我太累了:-(
上一个:如何使用函数删除类的实例?
评论