Deciding inheritance at instantiation?

Tobiah toby at tobiah.org
Tue Aug 7 13:52:35 EDT 2012


Interesting stuff.  Thanks.

On 08/06/2012 07:53 PM, alex23 wrote:
> On Aug 4, 6:48 am, Tobiah<t... at tobiah.org>  wrote:
>> I have a bunch of classes from another library (the html helpers
>> from web2py).  There are certain methods that I'd like to add to
>> every one of them.  So I'd like to put those methods in a class,
>> and pass the parent at the time of instantiation.  Web2py has
>> a FORM class for instance.  I'd like to go:
>>
>>          my_element = html_factory(FORM)
>>
>> Then my_element would be an instance of my class, and also
>> a child of FORM.
>
> I've lately begun to prefer composition over inheritance for
> situations like this:
>
>      class MyElementFormAdapter(object):
>          def __init__(self, form):
>              self.form = form
>
>          def render_form(self):
>              self.form.render()
>
>      my_element = MyElementFormAdapter(FORM)
>      my_element.render_form()
>      my_element.form.method_on_form()
>
> Advantages include being more simple and obvious than multiple
> inheritance, and avoiding namespace clashes:
>
>      class A(object):
>          def foo(self):
>              print 'a'
>
>      class B(object):
>          def foo(self):
>              print 'b'
>
>      class InheritFromAB(A, B):
>          pass
>
>      class AdaptAB(object):
>          def __init__(self, a, b):
>              self.a = a
>              self.b = b
>
>      >>>  inherit = InheritFromAB()
>      >>>  inherit.foo()
>      a
>      >>>  adapt = AdaptAB(A(), B())
>      >>>  adapt.a.foo()
>      a
>      >>>  adapt.b.foo()
>      b




More information about the Python-list mailing list