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