How to subclass a family
Arnaud Delobelle
arnodel at gmail.com
Mon Apr 8 17:17:03 EDT 2013
On 8 April 2013 10:44, Antoon Pardon <antoon.pardon at rece.vub.ac.be> wrote:
> Here is the idea. I have a number of classes with the same interface.
> Something like the following:
>
> class Foo1:
> def bar(self, ...):
> work
> def boo(self, ...):
> do something
> self.bar(...)
>
> What I want is the equivallent of:
>
> class Far1(Foo1):
> def boo(self, ...)
> do something different
> if whatever:
> self.bar(...)
> else:
> Foo1.boo(self, ...)
>
> Now of course I could subclass every class from the original family
> from Foo1 to Foon but that would mean a lot of duplicated code. Is
> there a way to reduce the use of duplicated code in such circumstances?
>
(Python 3)
------------------------------
class Foo1:
def bar(self):
print('Foo1.bar')
def boo(self, whatever):
print('Foo1.boo', whatever)
self.bar()
# class Foo2: ...(I'll let you define this one)
class DifferentBoo:
def boo(self, whatever):
print('DifferentBoo.boo', whatever)
if whatever:
self.bar()
else:
super().boo(whatever)
class Far1(DifferentBoo, Foo1): pass
# class Far2(DifferentBoo, Foo2): pass
------------------------------
>>> foo = Foo1()
>>> foo.bar()
Foo1.bar
>>> foo.boo(1)
Foo1.boo 1
Foo1.bar
>>> far = Far1()
>>> far.bar()
Foo1.bar
>>> far.boo(0)
DifferentBoo.boo 0
Foo1.boo 0
Foo1.bar
>>> far.boo(1)
DifferentBoo.boo 1
Foo1.bar
HTH,
--
Arnaud
More information about the Python-list
mailing list