Hello,

On Thu, 14 Jan 2021 22:19:06 +1100
Steven D'Aprano <st...@pearwood.info> wrote:

> On Thu, Jan 14, 2021 at 02:05:50PM +0300, Paul Sokolovsky wrote:
> 
> [...]
> > Semantically, Python can achieve the same with "imperative" syntax
> > like:
> > 
> > def mixin_method(self, args):
> >     ...
> > Cls.mixin_method = mixin_method
> > 
> > 
> > The question then: what are the best practices in *declarative*
> > syntax to achieve the same effect in Python? (but of course, unlike
> > Ruby, there should be explicit syntactic marker that we augment
> > existing class, not redefine it).  
> 
>     def Cls.mixin_method(self, args):
>         ...
> 
> has been suggested as syntax for adding new methods to an existing 
> class. I would use that occasionally.

Thanks for the info! But I'd say that I like syntax suggested by Chris
Angelico (which parallels Ruby's syntax) better. It reminds more of the
original class definition, and it's normal to add more than one
var/method via mixin/interface, so grouping them together using
"class ...:" makes sense. But "scoping" problems pops up nonetheless,
e.g. one would like, but really can't, do following:

import mod

@mixin
class mod.Cls:
    ...

So, here's the syntax I came to:

@mixin
class Cls(mod.Cls):
    ...

It literally reads like "let me add a mixin to class Cls
(specifically, mod.Cls)". IMHO, it's pretty neat. What do you think?

> Even more so, the generalisation:
> 
>     def obj.method(self, args):
>         ...
> 
> to add a method to any instance, not just to a class.

Nnnnooooo ;-). Instances can't have methods, only classes can.
Instances can only have instance variable storing a reference to a
method, which would need to be called (obj.method)(args), remember? ;-).

[]

-- 
Best regards,
 Paul                          mailto:pmis...@gmail.com
_______________________________________________
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/3C7R6DCCDQJRVBI5DG2NBMPNQ3XTB66B/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to