On 1/5/2018 2:09 PM, Guido van Rossum wrote: > I'm normally no big fan of things that take either a class or an > instance, but since fields() does this, I think is_dataclass() should > to. And that's the name I'd choose. OK on the pseudo-fields. Sounds good. I'll open a bpo issue. Eric. > On Fri, Jan 5, 2018 at 11:06 AM, Eric V. Smith <eric at trueblade.com > <mailto:eric at trueblade.com>> wrote: > > On 1/5/2018 12:58 PM, Guido van Rossum wrote: > > Hm. I don't know that people will conclude that checking for a > dataclass is an anti-pattern. They'll probably just invent a > myriad of different hacks like the one you showed. I recommend > making it public. > > > I'm trying to track down the original discussion. We got bogged down > on whether it worked for classes or instances or both, then we got > tied up in naming it (surprise!), then it looks like we decided to > just not include it since you could make those decisions for yourself. > > I think the discussion is buried in this thread: > https://mail.python.org/pipermail/python-dev/2017-November/150966.html > <https://mail.python.org/pipermail/python-dev/2017-November/150966.html> > > Which references: > https://github.com/ericvsmith/dataclasses/issues/99 > <https://github.com/ericvsmith/dataclasses/issues/99> > > So, ignoring the naming issue, I think if we want to revive it, the > question is: should isdataclass() return True on just instances, > just classes, or both? And should it ever raise an exception, or > just return False? > > I still worry a bit about ClassVar and InitVar being potentially > useful but I concede I have no use case so I'll drop it. > > > IIRC, we decided that we could add a parameter to > dataclasses.fields() if we ever wanted to return pseudo-fields. But > no one came up with a use case. > > Eric. > > > On Fri, Jan 5, 2018 at 8:43 AM, Eric V. Smith > <eric at trueblade.com <mailto:eric at trueblade.com> > <mailto:eric at trueblade.com <mailto:eric at trueblade.com>>> wrote: > > 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> > <mailto:eric at trueblade.com <mailto:eric at trueblade.com>> > <mailto:eric at trueblade.com <mailto:eric at trueblade.com> > <mailto: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> > <https://www.python.org/dev/peps/pep-0557/#inheritance > <https://www.python.org/dev/peps/pep-0557/#inheritance>> > > <https://www.python.org/dev/peps/pep-0557/#inheritance > <https://www.python.org/dev/peps/pep-0557/#inheritance> > <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. > > _______________________________________________ > Python-Dev mailing list > Python-Dev at python.org <mailto:Python-Dev at python.org> > <mailto:Python-Dev at python.org <mailto:Python-Dev at python.org>> > https://mail.python.org/mailman/listinfo/python-dev > <https://mail.python.org/mailman/listinfo/python-dev> > <https://mail.python.org/mailman/listinfo/python-dev > <https://mail.python.org/mailman/listinfo/python-dev>> > Unsubscribe: > https://mail.python.org/mailman/options/python-dev/guido%40python.org > <https://mail.python.org/mailman/options/python-dev/guido%40python.org> > <https://mail.python.org/mailman/options/python-dev/guido%40python.org > <https://mail.python.org/mailman/options/python-dev/guido%40python.org>> > > > > > -- > --Guido van Rossum (python.org/~guido > <http://python.org/%7Eguido> <http://python.org/%7Eguido>) > > > _______________________________________________ > Python-Dev mailing list > Python-Dev at python.org <mailto:Python-Dev at python.org> > https://mail.python.org/mailman/listinfo/python-dev > <https://mail.python.org/mailman/listinfo/python-dev> > Unsubscribe: > https://mail.python.org/mailman/options/python-dev/eric%2Ba-python-dev%40trueblade.com > <https://mail.python.org/mailman/options/python-dev/eric%2Ba-python-dev%40trueblade.com> > > > > > > -- > --Guido van Rossum (python.org/~guido <http://python.org/%7Eguido>)
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