экземпляра класса Cities, метод __iter__ возвращает экземпляр класса CityIterator. При повторном цикле возвращается тот же объект класса CityIterator. Хотя по моей логике, объект CityIterator уже должен быть другим, а на деле они ссылаются на одну ячейку памяти.
Почему так происходит?
class Cities:
def init(self):
print(f"Cities init called.id(self) = {id(self)}")
self._cities = ["Paris", "Berlin", "Rome", "Madrid", "London"]
self._index = 0
def len(self):
return len(self._cities)
def iter(self):
print("Cities iter called.")
return CityIterator(self)
class CityIterator:
def init(self, _city_obj):
print(f"CityIterator init called. id(self) = {id(self)} type(self)={type(self)}")
self._city_obj = _city_obj
self._index = 0
def iter(self):
print("CityIterator iter called.")
return self
def next(self):
print("CityIterator next called.")
if self._index >= len(self._city_obj):
raise StopIteration
else:
item = self._city_obj._cities[self._index]
self._index += 1
return item
cities = Cities()
for city in cities:
print(city)
for city in cities:
print(city)
Как ты проверяешь, что они ссылаются на одну ячейку памяти?
Обсуждают сегодня