On Thu, Dec 10, 2020 at 12:38 AM sam bland <sbland.co...@gmail.com> wrote:
>
> In response to the additional work required to convert the new python 
> dataclass using the json encoder I propose an __encode__ method that will be 
> included in the default dataclass attributes. This would then be picked up by 
> the default json encoder and called to encode the object. Using a common 
> __encode__ tag would allow the solution to also be applied to custom objects 
> and other new objects without needing to update all json encoders. The 
> __encode__ method would work similar to __repr__ but output a json string of 
> the object.
>

There's actually a pretty easy way to encode a dataclass - assuming
you just want all of its attributes, which is what you'd get from a
default implementation. Just encode its __dict__:

>>> @dataclasses.dataclass
... class Demo:
...     name: str
...     rank: int
...     value: int
...     def score(self):
...             print(f"{self.rank:05d} {self.name} ==> {self.value}")
...
>>> demo = Demo("foo", 1, 23)
>>> demo.score()
00001 foo ==> 23
>>> demo.__dict__
{'name': 'foo', 'rank': 1, 'value': 23}
>>> import json
>>> json.dumps(demo.__dict__)
'{"name": "foo", "rank": 1, "value": 23}'

It'll quietly ignore any methods you've added, and just output the attributes.

ChrisA
_______________________________________________
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/3BKVHNC7VL6PR3DPJUFESKFNXAPDMHU4/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to