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.

On Fri, Jan 5, 2018 at 11:06 AM, Eric V. Smith <e...@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
>
> Which references:
> 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 <e...@trueblade.com
>> <mailto:e...@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
>>         <e...@trueblade.com <mailto:e...@trueblade.com>
>>         <mailto:e...@trueblade.com <mailto:e...@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>>
>>
>>
>>         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@python.org <mailto:Python-Dev@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/guido%40python.org
>> <https://mail.python.org/mailman/options/python-dev/guido%40python.org>
>>
>>
>>
>>
>> --
>> --Guido van Rossum (python.org/~guido <http://python.org/%7Eguido>)
>>
>>
>> _______________________________________________
>> Python-Dev mailing list
>> Python-Dev@python.org
>> https://mail.python.org/mailman/listinfo/python-dev
>> Unsubscribe: https://mail.python.org/mailman/options/python-dev/eric%2Ba-
>> python-dev%40trueblade.com
>>
>>
>


-- 
--Guido van Rossum (python.org/~guido)
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to