method overriding trick
gmcm at hypernet.com
Sun Nov 14 03:48:55 CET 1999
Eric Jacobs wrote:
> Phil Mayes wrote:
> > I use a method that doesn't remove the clunkiness, but localises the
> > hierarchy to one line:
> > _Parent = basedlg.BaseDlg
> > class AddressDlg(_Parent):
> > def __init__(self, param):
> > self.local = param
> > _Parent.__init__(self, 2345)
> > By using the same name "_Parent" in all modules, less thinking is needed,
> > and cut'n'paste coding (what, me?) works better too.
> You wouldn't be able to reassign the _Parent variable to define another
> class elsewhere in the same module, though, because the functions defined
> this way will always look up the _Parent from the module namespace at
> execution time.
Unless you've nested your class statement inside a def or
another class, the class object will get built when the module
is loaded. So what the _Parent variable holds once your code
starts executing doesn't matter - it is only meaningful at the
time the "class" statement is executed.
Sure you can reassign it, but it will only mean something if
you do it at the top level.
OTOH, I find that it's rare for a base class and it's derived
classes to have the same __init__ signature, so for me the
trick is rarely useful.
More information about the Python-list