Deciding inheritance at instantiation?
alex23
wuwei23 at gmail.com
Mon Aug 6 22:53:53 EDT 2012
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