2012-02-25 21 views
16

Tôi đang triển khai thực chất đối tượng chứa (mặc dù nó có một chút logic riêng của nó). Tôi muốn có thể lặp qua các mục trong một trường trong lớp này (đây chỉ là một danh sách đơn giản). Tôi có nên tái thực hiện __iter__next cho lớp học của tôi hoặc là nó chấp nhận được để trả lại iterator của danh sách, như vậy:Python - triển khai __iter__ hoặc trả về một danh sách __iter__

class X: 

    def __init__(self): 
     self.list = [] 

    def __iter__(self): 
     return self.list.__iter__() 

Tôi là một chút không chắc chắn nếu điều này sẽ dẫn đến bất kỳ hành vi không mong muốn.

Trả lời

22

Bạn có thể sử dụng trình lặp của loại list được tích hợp sẵn. Tôi muốn đề nghị không gọi __iter__() một cách rõ ràng, tuy nhiên, nhưng thay vì sử dụng được xây dựng trong chức năng iter():

def __iter__(self): 
    return iter(self.list) 

Một lựa chọn khác có thể là để lấy được X từ list. (Trong Python 2.x, ít nhất bạn nên lấy được từ object.)

Các vấn đề liên quan