|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 介左来了 于 2019-8-25 20:13 编辑
第047讲中,对list类进行重写的时候,涉及到reverse(),insert(),__setitem__(self,key,value)等方法时,如果在方法中有引用自身,不会出现递归调用吗?
源码如下:
- class CountList(list):
- def __init__(self, *args):
- super().__init__(args)
- self.count = []
- for i in args:
- self.count.append(0)
-
- def __setitem__(self, key, value):
- #此处调用列表中的元素,不是会自动调用了 __setitem__(self, key, value) 魔法方法吗?为何实际运行的时候不会出现递归调用?
- self.count[key] += 1
- super().__setitem__(key, value)
- def insert(self, key, value):
- #此处调用了自身的函数insert(),不会引起递归调用吗?
- self.count.insert(key, 0)
- super().insert(key, value)
- def clear(self):
- #此处调用了自身的函数clear(),不会引起递归调用吗?
- self.count.clear()
- super().clear()
- def reverse(self):
- #此处调用了自身的函数reverse(),不会引起递归调用吗?
- self.count.reverse()
- super().reverse()
复制代码
以上几处,比较困惑,请大佬们解答一下,谢谢了。
它并没有调用自身啊!!
self.count.insert(key, 0)
好好看看代码,只有实例对象调用其类中定义方法才会去找其对应方法,是CountList类的实例对象去调用方法insert
而这是self.count.insert(key, 0),这是实例对象的属性去调用insert方法,但是self.count这就是一个列表对象,它可不是这个类的实例对象,它用的inseert()方法是python自带的list类中定义的方法。
|
|