Guido's new method definition idea
anthony.tolle at gmail.com
anthony.tolle at gmail.com
Mon Dec 8 12:01:18 EST 2008
On Dec 6, 4:15 pm, Carl Banks <pavlovevide... at gmail.com> wrote:
> On Dec 6, 12:47 am, "Patrick Mullen" <saluk64... at gmail.com> wrote:
>
> > Could I do something like this:
>
> > def a.add(b): return a+b
>
> > Outside of a class? Of course then that makes you think you could do
> > 5.add(6) or something craaaazy like that. (I mean, you can do
> > (5).__add__(6) but that's something else entirely)
>
> I'd be inclined to think that this defines an instancemethod on an
> existing object a. In other word, I'd read the following two lines as
> more or less equivalent.
>
> def a.add(b): return a+b
>
> a.add = lambda b: a+b
>
> Just as the following are equivalent:
>
> def foo(): return bar
>
> foo = lambda: bar
>
> I had been -0 on this, but now I think I'm -1.
This brings up another question, what would one use when referencing
method names inside the class definition?:
class C:
def self.method(arg):
self.value = arg
def self.othermethod(arg):
self.value = arg
# do this?
funcs = (self.method, self.othermethod)
# or this?
funcs = (method, othermethod)
On another related note, I would be interested in seeing this syntax
adopted for the very purpose Carl hinted at...
Normally, if I'm defining a nested function that needs to be stored as
an object attribute, I have to use a dummy name, like the following:
class C:
def createfunc(self, arg):
def _dummy(arg):
return arg + 1
self.func = _dummy
It would be nice to be able to do the following instead:
class C:
def createfunc(self):
def self.func(arg):
return arg + 1
Or, after the class definition is done, to extend it dynamically:
def C.method(self, arg):
self.value = arg
...which would be the equivalent of the following:
def method(self, arg):
self.value = arg
C.method = method
Since functions are first-class objects, it seems perfectly reasonable
to me.
More information about the Python-list
mailing list