using super

Scott David Daniels Scott.Daniels at Acm.Org
Mon Dec 31 19:19:11 EST 2007


Steven D'Aprano wrote:
> On Mon, 31 Dec 2007 08:03:22 -0800, Scott David Daniels wrote:
>> Steven D'Aprano wrote: ...
>>> def chain(meth):  # A decorator for calling super.
>>>     def f(self, *args, **kwargs):
>>>         result = meth(self, *args, **kwargs)
>>>         S = super(self.__class__, self)
>> This line is the problem.  The class parameter needs to be the class
>> (B in this case) in which the chaining method is defined, not that
>> of the object itself.
> One minor correction: the class parameter needs to be the class *itself*, 
> not the class *name* (which would be the string "B").
Point taken.

> I don't quite understand your description though. What do you mean "the 
> chaining method is defined"? chain() is defined outside of a class.
The class where f (the chaining method) is defined; equivalently, the
class in which the @chain is used.

-Scott



More information about the Python-list mailing list