Напишите класс Python, который выдает ожидаемый результат. В настоящее время выдает ValueError
# Can be modified. (Can even be a function or generator
class MyClass:
def __init__(self):
self.count = 0
def __iter__(self):
return self
def __next__(self):
self.count += 1
return self.count
#Cannot be modified Cannot pass arguments to MyClass constuctor
x, y = MyClass()
print(x, y) # Should return 1, 2
x, y, z = MyClass()
print(x, y, z) # 1, 2, 3
Самый близкий обходной путь — передача аргумента конструктору.
class MyClass:
def init(self, n):
self.x = range(n)
def __iter__(self):
return iter(x)
#Cannot be modified I want to avoid passing n
x, y = MyClass(2)
x, y, z= MyClass(3)
Немного лучший обходной путь — использовать очень большое значение по умолчанию n и использовать * в конце левой части.
class MyClass:
def init(self, n=100):
self.x = range(n)
def __iter__(self):
return iter(x)
x, y, *_ = MyClass()
x, y, z, *_ = MyClass()
Подробнее здесь: https://stackoverflow.com/questions/790 ... -size-shou
Я пытаюсь использовать распаковку кортежа для пользовательской итерации. Размер итерации должен увеличиваться по мере ув ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение