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:
- Nó giúp một đối tượng có thể lặp.
- 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:
- Định nghĩa phương thức
__iter__()bên trong lớp. - 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àmiter()trên một đối tượng hoặc khi dùng đối tượng đó trong vòng lặp for. - Trả về
selftrong__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.
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 độ.
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 độ.
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 độ.
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ớiTấ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