Steven D'Aprano wrote: > On Mon, Dec 28, 2020 at 09:06:40AM -0000, Anton Abrosimov wrote: > > Steven D'Aprano wrote: > > You contradict yourself: > > "I can implement any behaviour" > > "I can't realize any other behaviour ..." > > Which is correct? > > I apologize for my english, I meant that I cannot implement the > > following behavior inside the class: > > class MyClass: > > def __iter__(self): > > return self.items_for_iteration > > def __unpack__(self): > > return self.items_for_unpack > > > > I have to make a separate method and have to rely on the user of the class. > > Ah, now I understand what you mean: you want iteration and iterator > unpacking to do different things: > obj = MyClass() > list(obj) # iteration > # --> returns a b c d > print(*obj) # iterator unpacking > # --> returns x y z > > You can't do that, just like you can't make these different: > items = list(obj) # iteration > > items = [item for item in obj] # iteration in a comprehension > > items = [] > for item in obj: # iteration in a for-loop > items.append(item) > > And that is a good thing because it would be confusing and horrible > if iteration over an object was different depending on how you iterate > over it. > We're not going to invent new dunder methods: > def __iter__(self): > > def __forloop__(self): > > def __comprehension__(self): > > so that they can be different, and I don't think we should invent a new > dunder method __unpack__ so it can be different from iteration. > Iterator unpacking is just a form of iteration.
I agree with that. List unpacking is not a problem for me. The only thought: If `*` is an operator as PEP 448 say then there must be a method for it. The `**` behavior makes me sad. _______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/ASX4TJJKXN6ORP3I64LUAUYFEQKCM6US/ Code of Conduct: http://python.org/psf/codeofconduct/