On Mon, 31 Mar 2008 21:41:37 -0500, Ed Leafe <[EMAIL PROTECTED]> wrote:

>On Mar 31, 2008, at 5:58 PM, George Sakkis wrote:
>
>>> is there any tutorial for super method (when/how to use it)?
>>>
>>> or maybe someone could explain me how it works?
>>>
>>> thx
>>
>> Super is one of the dark corners of the language [1,2]... a good rule
>> of thumb is to stay away from it, or at least stick to its basic
>> usage.
>
>
>       I disagree - super is quite elegant and dependable.
>
>       Because Python support multiple inheritance, it is difficult to  
>manually ensure that when augmenting a method that the correct  
>superclass calls are made. super() handles that without having to  
>guess as to what the correct inheritance hierarchy is.
>
>       In my own project (Dabo), we use mixin classes liberally to provide  
>consistent behavior across our UI classes. The use of super makes  
>customizing __init__() behavior, for example, quite straightforward.  
>The general form looks like:
>
>class DaboUIClass(dabo.ui.dControlMixin, someWxPythonClass):
>       def __init__(self, *args, **kwargs):
>               doOurCustomStuffBeforeTheSuperCall()
>               super(DaboUIClass, self).__init__(*args, **kwargs)
>               doOurCustomStuffAfterTheSuperCall()
>
>       This has worked reliably for us in every place where we have used it.  
>There's nothing dark and mysterious about it at all.

Perhaps it's the oo-think that seems "dark and mysterious", rather
than anything about super. In my experience, "super" works just fine.

It is a bit tedious, in that it's all too easy to forget to change the
first parameter when moving a method that contains super to a
different class.

I've also found myself wondering:

1. What are the two arguments to super used for?
2. What happens when the method supplied *after* the super is
different from the containing method?

In the above example what happens if:

class DaboUIClass(dabo.ui.dControlMixin, someWxPythonClass):
        def __init__(self, *args, **kwargs):
                doOurCustomStuffBeforeTheSuperCall()
                super(DaboUIClass, self).callRandomMethod(foobar)
                doOurCustomStuffAfterTheSuperCall()
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to