Had not this been discussed here earlier this year?

(And despite there being perceived dangers to readability in the long term,
was accepted?)

Here it is on an archive:
https://mail.python.org/pipermail/python-ideas/2017-February/044551.html

And anyway - along that discussion, despite dislikng the general idea, I
got convinced that
creating an outside method that makes "super" or "__class__" work was
rather complicated.

Maybe we could just have a decorator for that, that would properly create
the __class__ cell?


    js
  -><-


On 4 August 2017 at 08:32, Steven D'Aprano <st...@pearwood.info> wrote:

> Hi Paul, and welcome!
>
>
> On Fri, Aug 04, 2017 at 07:39:56AM +0000, Paul Laos wrote:
> > Hi folks
> > I was thinking about how sometimes, a function sometimes acts on
> classes, and
> > behaves very much like a method.
>
> I'm not really sure what you mean by "acts on classes". I can only think
> of a function which takes a class as a parameter, and modifies the
> class. Like a class decorator. Or possibly a classmethod. But that's not
> what you seem to mean below. So I'm not quite certain I understand your
> proposal.
>
>
> > Adding new methods to classes existing classes
> > is currently somewhat difficult,
>
> If the class is written in Python, it isn't difficult at all, it is
> trivially easy. First define your method:
>
> def method(self, arg):
>     pass
>
>
> Then inject it onto the class using ordinary attribute assignment:
>
> TheClass.method = method
>
> And we're done!
>
> If the class is a built-in, or otherwise written in C, then "somewhat
> difficult" is an understatement. I think it can't be done at all.
>
>
> > and having pseudo methods would make that easier.
>
> I'm not sure that "easier" in this case would be better.
>
>
> > Code example: (The syntax can most likely be improved upon)
> >     def has_vowels(self: str):
> >         for vowel in ["a", "e,", "i", "o", "u"]:
> >             if vowel in self: return True
>
>
> How does Python, and for that matter the human reader, know which
> class or classes that method is injected into? My guess is it looks at
> the annotation. But that's a big change: annotations are currently
> guaranteed to have no runtime semantics (apart from being stored in the
> function's __annotation__ attribute). I'm not saying that can't be done,
> but there may be consequences we haven't thought of.
>
> If we say dir(str), will "has_vowels" show up?
>
> How about vars(str)?
>
> How does this interact with metaclasses?
>
>
>
> > This allows one to wring `string.has_vowels()` instead of
> `has_vowels(string)`,
> > which would make it easier to read,
>
> Well that's one opinion.
>
>
> > and would make it easier to add
> > functionality to existing classes, without having to extend them. This
> would be
> > useful for builtins or imported libraries, so one can fill in "missing"
> methods.
>
> http://www.virtuouscode.com/2008/02/23/why-monkeypatching-
> is-destroying-ruby/
>
> I think monkeypatching is great, so long as I'm the only one that does
> it. When other people do it, invariably they introduce bugs into my code
> by monkeypatching other things I didn't expect to be monkeypatched.
>
>
> > * Simple way to extend classes
> > * Improves readability
> > * Easy to understand
>
> I'll agree with the first one of those, if by "simple" you mean
> "somebody else did all the work to make this syntax do
> what I want it to do".
>
> The work behind the scenes is not likely to be simple: for starters,
> allowing monkeypatching of built-ins is likely going to require a rather
> big re-design of the Python interpreter.
>
>
> --
> Steve
> _______________________________________________
> Python-ideas mailing list
> Python-ideas@python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/
>
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to