using super
Steven D'Aprano
steve at REMOVE-THIS-cybersource.com.au
Mon Dec 31 09:08:43 EST 2007
On Mon, 31 Dec 2007 05:47:31 -0800, iu2 wrote:
> Hi
>
> I'm trying to make a method call automatically to its super using this
> syntax:
[snip code]
I'm not sure if this is your only problem or not, but super() only works
with new-style classes, not with classic classes. You must inherit from
object, or it cannot possibly work.
Change "class A" to "class A(object)".
However, I suspect your approach may be too complicated. Try this:
def chain(meth): # A decorator for calling super.
def f(self, *args, **kwargs):
result = meth(self, *args, **kwargs)
S = super(self.__class__, self)
getattr(S, meth.__name__)(*args, **kwargs)
return result
f.__name__ = "chained_" + meth.__name__
return f
class A(object):
def foo(self, x):
print "I am %s" % self
return x
class B(A):
@chain
def foo(self, x):
print "This is B!!!"
return x + 1
>>> a = A()
>>> a.foo(5)
I am <__main__.A object at 0xb7cf676c>
5
>>> b = B()
>>> b.foo(5)
This is B!!!
I am <__main__.B object at 0xb7cf68ac>
6
--
Steven
More information about the Python-list
mailing list