Python'da Orta Düzey Nesne Yönelimli Programlama
Jake Roach
Data Engineer
Nesne koleksiyonunun veya veri akışının gezilmesini sağlayan ve her seferinde bir öğe döndüren sınıflar
list, tuple gibidir, ancak farklı davranırfor döngüleriyle üzerinde döngü kurulurnext() işlevi$$
Yineleyici protokolü...
# Koleksiyon
chuck = NameIterator("Charles Carmicheal")
for letter in chuck:
print(letter)
C
h
u
...
# Veri akışı
fun_game = DiceGame(rolls=3)
next(fun_game) # ... vb.
4
__iter__()
... return self$$
__next__()
$$
Bir sınıfın yineleyici sayılması için hem __iter__() hem de __next__() tanımlanmalıdır!
class CoinFlips:
def __init__(self, number_of_flips):
self.number_of_flips = number_of_flips # Toplam atış sayısını saklayın
self.counter = 0
def __iter__(self):
return self # Yineleyicinin kendisini döndürün
# Sıradaki parayı atın, çıktıyı döndürün
def __next__(self):
if self.counter < self.number_of_flips:
self.counter += 1
return random.choice(["H", "T"])
three_flips = CoinFlips(3)
# Parayı üç kez atın
next(three_flips)
next(three_flips)
next(three_flips)
H
H
T
three_flips = CoinFlips(3)
# Şimdi, yineleyicideki her öğeyi döngüleyin
for flip in three_flips:
print(flip)
T
H
T
None
None
None
...
...
def __next__(self):
# Sadece para "number_of_flips" kez atılmadıysa yapın
if self.counter < self.number_of_flips:
self.counter += 1
return random.choice(["H", "T"])
else: # Aksi halde StopIteration ile durdurun
raise StopIteration
three_flips = CoinFlips(3)
# Şimdi, yineleyicideki her öğeyi döngüleyin
for flip in three_flips:
print(flip)
H
T
H
while True:
try:
next(three_flips) # three_flips'in bir sonraki öğesini çekin
# stop iteration istisnasını yakalayın
except StopIteration:
print("Tüm para atışları tamamlandı!")
break
H
H
H
Tüm para atışları tamamlandı!
Python'da Orta Düzey Nesne Yönelimli Programlama