2009-12-31 3 views

답변

1

당신이 무엇을 요구하고 있는지 완전히 모르겠지만, 명시 적으로 호출하지 않았기 때문에 next() 함수가 호출되지 않았습니다.

for i in b: 

이 암시 적으로 반복자의 다음 내용() 메서드를 호출해야하지만, 반복자는 a 아니라 iter(self.w)되지 않습니다 : 당신은 당신이 할 때 호출되는있는 __iter__을 정의합니다. 개체가 반복자가 아니기 때문에 next() 메서드는 호출되지 않습니다.

희망이 도움이됩니다.

1

__iter__()에서는없는 클래스 자체에 self.w에 저장된 DICT에 반복자를 돌려줍니다. 대신 self을 반환하면 문제가 해결됩니다.

1

next은 마지막 위치를 기억하고 다음 항목을 반환해야하며 (코드에서와 같이 항상 첫 번째 항목을 반환하지는 않음) 더 이상 항목이없는 경우 StopIteration 예외를 발생시켜야합니다.

__iter__은 클래스 자체를 반환해야합니다.

Python documentation for iterators을 참조하십시오. generator를 사용하여 경우

이 더 적합 :

class a(object): 
    w={'a':'aaa','b':'bbb'} 
    def __iter__(self): 
     print 'sss' 
     for i in self.w: 
      yield i 

b=a() 
for i in b: 
    print i 
관련 문제