The Adapter pattern translates one interface to another.
#!/usr/bin/env python class Animal(object): def __init__( self, name): self.name = name def tellName( self): print( self.name,) class Dog( Animal): def __init__( self, name): Animal.__init__(self, name) def bark(self): print( "wau") class Cat(Animal): def __init__( self, name): Animal.__init__(self, name) def miau(self): print( "miau") class Adapter( object): def __init__(self, obj, adaptedMethods): self.obj = obj self.__dict__.update( adaptedMethods) def __getattr__( self, attr): return getattr( self.obj, attr) def main(): lst = [] dog = Dog( "Bello") cat = Cat( "Seute") lst.append( Adapter( dog, { 'make_noise': dog.bark})) lst.append( Adapter( cat, { 'make_noise' : cat.miau})) for i in lst: i.tellName() i.make_noise() if __name__ == "__main__": main()