Первое: не вызывайте ваш генератор __iter__
, поскольку он зарезервирован для того, чтобы сделать экземпляры вашего объекта итеративными (без вызова определенного метода).
Для создания бесконечного списка значений вам на самом деле не нужно перемешивать. Вместо этого просто выберите случайное значение из списка каждый раз. Добавьте логику, если хотите, чтобы одно и то же значение было выбрано слишком рано после предыдущего такого же выбора, хотя чем больше вы его контролируете, тем менее случайным оно становится.
import random
class obj(object):
def __init__(self):
pass
def items(self): # Generator
a = list(range(10))
while True:
yield random.choice(a)
Если ваш список a
на самом деле представляет собой последовательность от 0 до 9 (включительно), то выполните:
def items(self): # Generator
while True:
yield random.randint(0, 10)
Если вы действительно хотите, чтобы все значения списка были созданы перед перезапуском, то имейте в виду, что последний выбор первого пакета может быть таким же, как первый выбор второго пакета. Во всяком случае, это будет выглядеть так:
def items(self): # Generator
a = list(range(10))
while True:
shuffle(a)
yield from a