|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
__len__(self)定义当被 len() 调用时的行为(返回容器中元素的个数),但是在下面代码中__len__的改写那一块,返回的是len(self.values),那Python检测到len()被调用,不是应该又自动调用__len__()魔法方法,然后形成一个死递归吗?
- class CountList:
- def __init__(self,*args):
- self.values = [x for x in args]
- self.count = {}.fromkeys(range(len(self.values)),0)
- def __len__(self):
- return len(self.values)
- def __getitem__(self,key):
- self.count[key] += 1
- return self.values[key]
复制代码
就比如下面这个例子会在进行加法和减法运算的时候陷入死递归一样:
- class New_int(int):
- def __add__(self,other):
- return self + other
- def __sub__(self,other):
- return self - other
复制代码
这一行中的 len() 函数 是 python 的内置的 len() 函数, 因为里面的参数值是 self.values,如果是参数值是 self 的话就会是你说的无限递归了。
|
|