On 1/5/2018 11:24 AM, Guido van Rossum wrote: > On Fri, Jan 5, 2018 at 5:08 AM, Eric V. Smith <eric at trueblade.com > <mailto:eric at trueblade.com>> wrote: > > On 1/2/2018 12:01 AM, Guido van Rossum wrote: > > Yes, there's a class variable (__dataclass_fields__) that > identifies the parent fields. The PEP doesn't mention this or > the fact that special methods (like __repr__ and __init__) can > tell whether a base class is a dataclass. It probably should > though. (@Eric) > > > I think that's covered in this section: > https://www.python.org/dev/peps/pep-0557/#inheritance > <https://www.python.org/dev/peps/pep-0557/#inheritance> > > > I was specifically talking about the name and contents of > __dataclass_fields__, which are not documented by the PEP. I expect it's > inevitable that people will be looking at this (since they can see it in > the source code). Or do you recommend that people use > dataclasses.fields() and catch ValueError? The expectation is to use dataclasses.fields(). Both it and __dataclass_fields__ contain the fields for this class and the parents. The only difference is the pseudo-fields. I can add some words describing .fields() returning which fields are present. > I notice that _isdataclass() > exists but is private and I don't recall why. I think the argument was that it's an anti-pattern, and if you really want to know, just call dataclasses.fields() and catch the TypeError. I have this in a helper file: def isdataclass(obj): """Returns True for dataclass classes and instances.""" try: dataclasses.fields(obj) return True except TypeError: return False (Also now I'm curious what > the "pseudo-fields" are that fields() ignores, but that's OT.) ClassVar and InitVar "fields". dataclasses.fields() doesn't return them. Eric.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4