python进阶课程中class Fib(object): def __init__(self, num): a,b,L=0,1,[] for n in range(num): L.append(a) a=b+a b=a self.numbers = L def __str__(self): return str(self.numbers) __repr__=__str__ def __len__(self): return len(self.numbers)f = Fib(10)print fprint len(f)这里为什么用 str(self.numbers),之后再使用len(self.numbers)来求得list中的元素个数?我在自己的平台试了一下a=[1,2,3,4,5]print len(a)b=str(a)print bprint len(b)输出的结果 5[1, 2, 3, 4, 5]15为什么最后一个不是5?按照@清波的解释,那为什么len(a)=5而不是15= =都是list,按照逗号后面加空格print len(a)也应该等于15吧
3 回答
已采纳

小钱趣
TA贡献1条经验 获得超0个赞
因为a是一个list,实际a的内容只有1 2 3 4 5,print a 显示的是[1,2,3,4,5]的格式是为了告诉你它是一个list
但是b是一个字符串,因为b = str(a),是通过str函数获取的,他的实际内容就是[1, 2, 3, 4, 5]
题主可以下面的方式证明一下,就是通过list.append(6),在list末尾加入一个元素
发现个b添加元素时,它告诉你b是str类型,不可以添加元素
但是a可以成功添加
所以a 和 b一个是list一个是str,虽然 print 时候看起来一样,但是实际内容是不一样的,长度也不相等

清波
TA贡献165条经验 获得超90个赞
不做理论上的解释了, 类内部调用的时候自身属性的时候 需要 self.属性名 这样来调用。 至于最后两个方法,可以看做是对Python 内置函数的重写,虽然重写中并没与改变什么。
至于你自己测试的 len(5) 为什么等于15 , 这是因为 Python 默认给列表元素 的 每个逗号后面加上一个空格, 随意字符串后其实包含 5个数字,4个逗号,4个空格,2个方括号,5+4+4+2=15
添加回答
举报
0/150
提交
取消