26.12.20 13:23, Anton Abrosimov пише: > I am trying to release comfortable dataclass unpacking using `**` operator. > Now I have 5 different ways to do it. > But not a single good one. Confused by the implementation of the unpacking > operator. > > So when I try to unpack any custom class, I get the error: > > `type object argument after ** must be a mapping, not MyClass` > > Ok, nothing special. I need to use `collections.abc.Mapping` right? > Now I need to implement: `__getitem__`, `__iter__`, `__len__`. Not a problem. > But additionally I get: `keys`, `items`, `values`. > Hey, I don't need them. I don't need the full mapping functionality. I only > need the double asterisk to work. > > Right, we have a duck typing! > We throw out `abc.Mapping`. What do we need to implement? > It's `__getitem__` and `keys`. Wtf `keys`? > > I am looking at Python Data model: > https://docs.python.org/3/reference/datamodel.html > There many operators, and they depend on special double underscore methods. > Hmm, I don't see unpack operators there, it's strange. > But why it's `keys`? Because the historical is `dict`? > I think a dependency on `__iter__` is more preferable and expectable over a > userspace named `keys`. > Actually, `items()` is more predictable.
See thread "Add __keys__ or __items__ protocol". https://mail.python.org/archives/list/python-ideas@python.org/thread/A3CK7Y2ICIIVYKMAXSCUVYLK7IC7CH6G/#LCWMA6WMFLLSWXPKYC6FEUDHZBR3MYPE _______________________________________________ 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/3AJOVRCP5J2YXS4GH66D6YQS52JHXF2T/ Code of Conduct: http://python.org/psf/codeofconduct/