[Python-ideas] Explicit self argument, implicit super argument
Arnaud Delobelle
arno at marooned.org.uk
Mon Nov 19 22:54:50 CET 2007
On 19 Nov 2007, at 20:42, Neil Toronto wrote:
>
[...]
> Now, correct me if I'm wrong, but it seems there are only two use
> cases
> for DistantParentOfD.method(D_instance, ...):
>
> 1. The Good Case: you know the "next-method" as determined by the MRO
> isn't the right one to call. Multiple inheritance can twist you into
> this sort of behavior, though if it does, your design likely needs
> reconsideration.
>
> 2. The Evil Case: you know the override method as defined by D isn't
> the
> one you want for your extra-special D instance. This should be
> possible
> but never encouraged.
>
> Because the runtime enforces isinstance(D_instance, D), everything
> else
> can be handled with D_instance.method(...) or self.method() or
> super.method(). We know that #1 and #2 above are the uncommon cases,
> which is why the new "super", which covers the common ones, doesn't
> cover those.
>
> Is it right to say that the explicit "self" parameter only exists to
> enable those two uncommon cases?
Self being explicit makes it less selfish :)
To illustrate, I like that you can do:
class Foo(str):
def mybar(self):
class Bar(str):
def madeby(me):
return "I am %s and I was made by %s" % (me, self)
return Bar
>>> foo=Foo("foo")
>>> bar=foo.mybar()
>>> Bar=foo.mybar()
>>> bar=Bar("bar")
>>> print bar.madeby()
I am bar and I was made by foo
This depends on 'self' being explicit and is not related to super.
I didn't know about implicit super, it's probably great but my initial
reaction is that I don't like it :(
Why not:
class Foo:
@with_super
def bar(super, self, x, y):
super.bar(x, y)
...
--
Arnaud
More information about the Python-ideas
mailing list