[Python-ideas] Define a method or function attribute outside of a class with the dot operator

Steven D'Aprano steve at pearwood.info
Wed Feb 15 06:43:12 EST 2017


On Mon, Feb 13, 2017 at 06:14:34PM -0800, David Mertz wrote:
> On Mon, Feb 13, 2017 at 5:48 PM, Steven D'Aprano <steve at pearwood.info>
> wrote:
> 
> > # the clean proposed way:
> > def instance.method(self):  # or MyClass.method
> >     ...
> >
> > But I don't think that we can reasonably argue that the suggested syntax
> > isn't a clear, non-trivial win over the status quo, not unless we're
> > also going to argue that introducing decorator syntax was a waste of
> > time.
> >
> 
> I argue it's not a win specifically because we HAVE decorators already.

I wouldn't word it quite like that, but I'll certainly agree that a 
decorator may be able to (almost) solve the method-injection use-case. 
Being able to write:

@inject(Class)
def method ...


is almost as nice as 

def Class.method ...


The one thing a decorator can't do is clean up after itself and avoid 
leaving an unneeded and unnecessary 'method' name in the current 
namespace.


[...]
> Moreover, I think your spelling of what it is sugar for is slightly off.
> The `del method` at the end feels wrong to me.  Specifically, in the
> example I repeated of attaching callbacks, the reason I'd want a function
> defined outside any particular class (or instance) scope is because I might
> want to use the same function as a method of various classes.

The existing syntax won't be going away, so anything you can do now, you 
will still be able to do :-)


My gut feeling is that `def Class.method` should avoid polluting the 
current namespace. If you need access to the method again, you can 
always grab it from `Class.method`.


-- 
Steve


More information about the Python-ideas mailing list