Menu
CoddyTech

Triển khai __iter__()

Bài học 4 trên 13 trong khóa học Trình lặp trong Python của Coddy.

Để tạo một trình lặp tùy chỉnh trong Python, bạn cần triển khai phương thức __iter__() trong một lớp. Phương thức này là phần thiết yếu của giao thức trình lặp, cho phép bạn xác định cách đối tượng tùy chỉnh hoạt động như một trình lặp.

Phương thức __iter__()

Phương thức __iter__() có hai mục đích chính:

  1. Nó giúp một đối tượng có thể lặp.
  2. Nó trả về chính đối tượng trình lặp đó.

Đây là cấu trúc cơ bản của một lớp có phương thức __iter__():

class MyIterator:
    def __init__(self, data):
        self.data = data
        self.index = 0

    def __iter__(self):
        return self

Triển khai __iter__()

Để triển khai __iter__() trong lớp tùy chỉnh:

  1. Định nghĩa phương thức __iter__() bên trong lớp.
  2. Phương thức này nên trả về chính đối tượng trình lặp đó (thường là self).

Đây là ví dụ về một trình lặp tùy chỉnh đơn giản:

class CountDown:
    def __init__(self, start):
        self.start = start

    def __iter__(self):
        # Trả về đối tượng trình lặp (iterator) (self)
        return self

    def __next__(self):
        if self.start <= 0:
            raise StopIteration
        self.start -= 1
        return self.start + 1

# Sử dụng trình lặp tùy chỉnh
countdown = CountDown(5)
for num in countdown:
    print(num)

Trong ví dụ này, phương thức __iter__() trả về self, giúp đối tượng CountDown vừa có thể lặp, vừa là trình lặp của chính nó.

Điểm chính

  • Phương thức __iter__() được gọi khi bạn dùng hàm iter() trên một đối tượng hoặc khi dùng đối tượng đó trong vòng lặp for.
  • Trả về self trong __iter__() là cách làm phổ biến khi lớp triển khai cả __iter__() lẫn __next__().
  • Nếu lớp chỉ triển khai __iter__(), phương thức này nên trả về một đối tượng trình lặp riêng có phương thức __next__().

Bằng cách triển khai __iter__(), bạn giúp các đối tượng tùy chỉnh có thể lặp, nhờ đó có thể dùng chúng trong vòng lặp for và các thao tác dựa trên trình lặp khác trong Python.

quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

challenge icon

Thử thách

Dễ

Tạo một lớp iterator tùy chỉnh có tên AlphabetIterator để tạo ra các chữ cái viết hoa trong bảng chữ cái tiếng Anh. Iterator bắt đầu từ 'A' và tiếp tục đến chữ cái được chỉ định.

Bạn được cung cấp:

  • Một chữ cái viết hoa duy nhất làm đầu vào (ví dụ: 'E', 'K', 'Z')

Lớp AlphabetIterator của bạn cần:

  • Triển khai phương thức __iter__() để đối tượng có thể lặp qua
  • Tạo các chữ cái viết hoa, bắt đầu từ 'A'
  • Dừng khi đến chữ cái đầu vào được chỉ định, bao gồm cả chữ cái đó

Sau khi triển khai lớp AlphabetIterator, hãy tạo một instance bằng chữ cái đầu vào và in từng chữ cái được tạo ra trên một dòng mới.

Đầu vào sẽ được cung cấp dưới dạng chuỗi chứa một chữ cái viết hoa duy nhất.

Tự làm thử

# Đọc đầu vào
end_letter = input().strip()

class AlphabetIterator:
    def __init__(self, end_letter):
        self.end_letter = end_letter
        self.current_letter = 'A'

    def __iter__(self):
        return self

    # TODO: Triển khai phương thức __next__()

# Tạo một instance của AlphabetIterator
alphabet_iter = AlphabetIterator(end_letter)

# TODO: Lặp qua AlphabetIterator và in từng chữ cái

# Note: In mỗi chữ cái trên một dòng mới

Tất cả bài học trong Trình lặp trong Python

Tự luyện tập: Trình biên dịch Python online