On Sat, Apr 30, 2022 at 2:17 PM Pablo Alcain <pabloalc...@gmail.com> wrote:

>
>>> B) Most __init__ params need specialized behavior, and are quite
>> distinct from what's needed by __eq__ and __repr__
>>
>> (B) is well covered by the current, you-need-to-specify-everything
>> approach.
>>
>
> I don’t see B as a “extreme approach”.
>

It's not and "extreme" approach -- it's one end of a continuum.


> I think that comparing python classes with the specific dataclass is not
> helpful. The B scenario is simply the
>


> $ grep -Ie "self\.\(\w\+\) = \1" -r cpython/Lib | wc
> 2095
>
> I did the same in two libraries that I use regularly: pandas and
> scikit-learn:
>
> $ grep -Ie "self\.\(\w\+\) = \1" -r sklearn | wc -l
> 1786
>
> $ grep -Ie "self\.\(\w\+\) = \1" -r pandas | wc -l
> 650
>
> That’s a total of ~4.5k lines of code (again, this is an overestimation,
> but it can give us an idea of the ballpark estimate)
>

That, well, is pretty much useless, if I understand the re correctly -- the
fact that a class is assigning to self doesn't mean it's directly assigning
the parameters with no other logic. And any number of those self
assignments could be in non-__init__ methods. All that shows is that
instance attributes are used. I don't think anyone is questioning that.

For a better and more fine-grained analysis, Quimey wrote this small
> library (https://github.com/quimeyps/analize_autoassign) that uses the
> Abstract Syntax Tree to analyze a bunch of libraries and identify when the
> “autoassign” could work.
>

It shows that out of 20k analyzed classes in the selected libraries
> (including black, pandas, numpy, etc), ~17% of them could benefit from the
> usage of auto-assign syntax.
>

I only read English, and haven't studied the coe, so I don't know how that
works, but assuming it's accurately testing for the simple cases that
auto-assigning could work for;

That's not that much actually --  for approx every six-parameter  function,
one of them could be auto-assigned.

or for every six functions, one could make good use of auto-assignment (and
maybe be a dataclass?)

So it looks like the isolated pattern of `self.<something> = <something>`
> is used a lot.
>

I don't think that's ever been in question. The question, as I see it, is
what fraction of parameters could get auto-assigned in general -- for
classes where dataclasses wouldn't make sense.

And I'm not trying to be a Negative Nelly here -- I honestly don't know, I
actually expected it to be higher than 17% -- but in any case, I think it
should be higher than 17% to make it worth a syntax addition.

But pandas and numpy may not be the least bit representative -- maybe run
the most popular packages on PyPi?

I thought I made this point, but it seems to have gotten lost:

What I'm saying is that, for example, if a class __init__ has 6 parameters,
and one of them could be auto-assigned, then yes, auto-assigning could be
used, but you really haven't gained much from that -- it would not be worth
the syntax change.

And any class with an __init__ in which most or all parameters could be
auto-assigned -- then those might be a good candidate for a dataclass.

So how many are there where say, more than half of  __init__
parameters could be auto-assigned, where dataclasses wouldn't be helpful? A
lot? then, yes, new syntax may be warranted.

But, obviously, it entails a further of discussion whether it makes sense
> to add new syntax for this, considering the maintenance that it implies.
>

It's not so much the maintenance -- it's the transition burden, and the
burden of yet more complexity in the language, particularly
parameters/arguments:

Try to teach a newbie about arguments/parameters in Python, there is a
remarkable complexity there already:

positional vs keyword
*args, **kwargs
keyword-only.

(and all of these from both the caller and callee perspective)

That's a lot of possible combinations -- believe me, it's pretty darn
complex and hard to explain!

-CHB

-- 
Christopher Barker, PhD (Chris)

Python Language Consulting
  - Teaching
  - Scientific Software Development
  - Desktop GUI and Web Development
  - wxPython, numpy, scipy, Cython
_______________________________________________
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/QLYDWJBVMVKRE2RRN7WFCVUQWOEFMHOE/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to