в трёх разных полях, например
class A: def __init__(self): self.x = 10 self.y = 50 self.z = 100
ну только лучше их всё же сделать аргументами конструктора
я тут не пойму как эти элементы поочередно возвращать
попробуй завести поле, которое будет некоторым образом обозначать, какую переменную нужно возвращать
а как по дефолту выглядят методы next и iter?
по умолчанию они не определены
я имею в виду в list когда по нему проходится for
насколько я знаю, метод __iter__ возвращает некоторый итератор по этому списку, у которого __iter__ определён как тождество, а __next__ некоторым образом возвращает нужный элемент и меняет внутреннее состояние итератора
class A: def __init__(self, x): self.x = x def __iter__(self): self.i = 0 return self def __next__(self): if(self.i >= len(self.x)): raise StopIteration x = self.i self.i += 1 return self.x[x] a = A([44,2,3]) for i in a: for j in a: print(i,j) не знаешь почему тут вывод: 44 44 44 2 44 3
тебе же сказал Тишка не использовать стандартные коллекции list относится к ним
это да я пока хочу разобраться с выводом
ну в таком случае потому что у тебя смешался объект твоей коллекции с итератором по ней у всех итераторов по одному объекту в твоём случае один и тот же стейт так быть не должно
все равно пока не пойму как это сделать)
сделай отдельный класс для итератора
пусть он внутри себя хранит ссылку на A и состояние своё
Обсуждают сегодня