Inheritance and Design Question

Andre Engels andreengels at gmail.com
Thu May 28 07:53:17 CEST 2009


On Wed, May 27, 2009 at 9:58 PM, imageguy <imageguy1206 at gmail.com> wrote:
> I have an object the I would like to use as a base class.  Some of the
> methods I would like to override completely, but others I would simply
> like to call the base class method and use the return value in the
> child method.  The purpose here is to eliminate the duplication of
> valuable code in the parent, when I really just need the child to
> operate of a results of the parent.
>
> Consider the following two classes;
>
> class Parent(object):
>    def process(self, value):
>        retval = "Parent.result('%s')" % value
>        return retval
>
> class Child(Parent):
>    def __init__(self):
>        Parent.__init__(self)
>
>    def process(self, value):
>        retval = "Child.result('%s')" % super(Child, self).process
> (value)
>        return retval
>
> So ....
>
> foo = Child()
> print foo.process('the value')
>>> Child.result('Parent.result('the value')')
>
> IS there another pattern or idiom that would accomplish this?
> This seems a bit 'smelly' to me.  Also seems almost the inverse of
> decorators, but I am not sure decorators would be appropriate in this
> case.

I think I would split out the calculation into two methods in this case:

class Parent(object):
    def process_essential(self,value):
        retval = "Parent.result('%s')" % value
        return retval

    def processs(self,value):
        return process_essential(value)

class Child(Parent):
    def process(self,value):
        retval = "Child.result('%s')" % process_essential(value)
        return retval


-- 
André Engels, andreengels at gmail.com



More information about the Python-list mailing list