Adapter

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()