2014-12-17 1 views
1

__iter__ 메소드의 본문은 Python의 클래스 정의에서 어떤 의미가 있습니까? __iter__ 메서드는 반복자를 반환해야한다는 것을 알고 있습니다. 그렇다면 모든 __iter__ 메서드는 반복자 (다른 곳에서 정의 된)를 반환하는 return 문만 포함하면 안됩니까? 어떤 경우에 __iter__ 방법에 시체가있는 이유는 무엇입니까?__iter__ 메서드 본문의 요점은 무엇입니까?

+0

리턴 할 반복자가 작성하기가 쉽지 않을 수 있습니다. –

+0

return 문처럼 사소한 것조차도 성명서입니다. 문은 어떤 상황에서 정의되어야합니다. 메소드가 이미 모든 종류의 객체 동작에 사용되는 경우 다른 유형의 것을 고안하는 것은 이상 할 것입니다. 반복자는 완전히 다른 객체이거나 메타 프로그래밍에 사용될 수 있습니다. – tdelaney

답변

2

그것은 그 자체로 __iter__ 방법은 반복자가 될 매우 흔한 일 - 발전기의 형태 : 물론 당신이 원하는만큼 복잡 할 수

def __iter__(self): 
    for datum in self.data: 
     yield datum + 1 

.

한 줄로 끝나는 곳은 __iter__입니다. 다른 하나의 반복 가능한 줄을 감싸고 있고 지연시키고 싶을 때가 있습니다. __getattr__ 또는 __contains__의 "지점"에 대해서도 물어볼 수 있습니다.

1

신체가 의미하는 바를 실제로 얻지 못합니다. 나는 당신이 방법 __iter__의 정의에 대해 이야기하고 있다고 가정합니다.

가끔은 yield을 사용하여 생성기를 반환 할 수 있습니다. 이 경우 생성 논리를 __iter__의 본문에 쓸 수 있습니다.

또는 다른 반복기를 반환하면 일부 논리가 발생할 수 있습니다. 따라서 항상 단순히 return이 아닙니다.

-1

ITER 방법은 순차적 인덱스 0에서 시작하여 인덱스가 더 이상 유효하지 않습니다 때 IndexError을 높이는를 복용, 반복자를 반환하거나 의 getItem 방법을 정의합니다.

+1

이 질문에 답하지 않고 매우 일관성이 없습니다. – Eevee

관련 문제