Python __for循环中的getitem\uuuuu调用
我正在学习Python,我一点也不懂。考虑这个代码:Python __for循环中的getitem\uuuuu调用,python,Python,我正在学习Python,我一点也不懂。考虑这个代码: class Stack: def __init__(self): self.items = [] def push(self, item): self.items.append(item) def pop(self): return self.items.pop() def __getitem__(self,index): print "index",in
class Stack:
def __init__(self):
self.items = []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def __getitem__(self,index):
print "index",index
return self.items[index]
def __len__(self):
return len(self.items)
stack = Stack()
stack.push(2)
stack.push(1)
stack.push(0)
for item in stack:
print item
以及输出
index 0
2
index 1
1
index 2
0
index 3
为什么要调用getitem四次?for循环不知道如何具体迭代对象,因为您没有实现
\uuu iter()
,所以它使用默认迭代器。这从索引0开始,直到通过请求索引3获得索引器。看
顺便说一句,如果您从列表
派生,您的实现会简单得多。您不需要\uuuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。另外,由于列表
有一个非常好的iter()方法,因此for
将知道如何在不超过列表末尾的情况下迭代它
class Stack(list):
push = list.append
事实上,我的原始代码有它,请参阅更新。是的,我在细节上错了。原来是\uu iter\uuuuuu()
而不是\uuuuu len\uuuuuu()
。现在把它修好,太好了。顺便说一句,有没有比定义(self)更好的方法来实现这一点呢