On Thu, 11 Nov 2021 at 17:13, Carl Meyer <c...@oddbird.net> wrote:
>
> I'm also -1 on churning the stdlib in search of a global consistency
> that PEP 8 itself disavows, but this particular argument against it
> doesn't make sense:
>
> On Thu, Nov 11, 2021 at 9:14 AM Paul Moore <p.f.mo...@gmail.com> wrote:
> > To examine some specific cases, lists are a type, but list(...) is a
> > function for constructing lists. The function-style usage is far more
> > common than the use of list as a type name (possibly depending on how
> > much of a static typing advocate you are...). So "list" should be
> > lower case by that logic, and therefore according to PEP 8. And str()
> > is a function for getting the string representation of an object as
> > well as being a type - so should it be "str" or "Str"? That's at best
> > a judgement call (usage is probably more evenly divided in this case),
> > but PEP 8 supports both choices. Or to put it another way, "uniform"
> > casing is a myth, if you read PEP 8 properly.
>
> Any type can be called to construct an instance of that type. If I
> define a class Foo, I create an instance of Foo by calling `Foo(...)`.
> `list` and `str` are no different; I can create an instance of the
> type by calling it. This doesn't mean they are "both a type and a
> function" in some unusual way, it just means that we always call types
> in order to construct instances of them.

I understand that. However, PEP 8 states "Names that are visible to
the user as public parts of the API should
follow conventions that reflect *usage* rather than *implementation*."
(My emphasis) I quoted this, but you cut that part of my post.

My point here is that how you interpret "usage" is far from clear -
I'm sure that a lot of people would teach str(...) as a function that
creates a string representation of an object, deferring the detail
that it's actually a type, and you can call a type to create objects
of that type until later. So would a newcomer necessarily know (or
even need to know) that str is a type, not a function? There's also
the case of changing implementation between a class and a factory
function - surely that should not require a compatibility-breaking
name change? The key is that it's fairly easy to argue "reasonable
doubt" here - PEP 8 is intended to be applied with a certain level of
judgement, not as a set of absolute rules.

But yes, I didn't make my point particularly clearly, I apologise.

Paul
_______________________________________________
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/2A5OB3Q7GRRPZD2BKBGF2EMAPPJIKBJ6/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to