Мне было интересно, можно ли использовать распаковку звезд с собственными классами, а не просто встроенные, такие как list
и tuple
.star распаковка для собственных классов
class Agent(object):
def __init__(self, cards):
self.cards = cards
def __len__(self):
return len(self.cards)
def __iter__(self):
return self.cards
И быть в состоянии написать
agent = Agent([1,2,3,4])
myfunc(*agent)
Но я получаю:
TypeError: visualize() argument after * must be a sequence, not Agent
Какие методы я должен осуществить для того, чтобы распаковывать возможно?
Ваш '__iter__' должен возвращать итератор по картам, а не по длине. – kindall
Возможный дубликат [Как сделать класс итерабельным?] (Http://stackoverflow.com/questions/19151/how-to-make-class-iterable) –
@Rogalski Я не согласен, что это дубликат, это неочевидно, что делая его итерабельным, решает проблему с распаковкой (хотя и делает). –