33
44"""http://ginstrom.com/scribbles/2008/11/06/generic-adapter-class-in-python/"""
55
6- import os
76
87class Dog (object ):
98 def __init__ (self ):
109 self .name = "Dog"
10+
1111 def bark (self ):
1212 return "woof!"
1313
14+
1415class Cat (object ):
1516 def __init__ (self ):
1617 self .name = "Cat"
18+
1719 def meow (self ):
1820 return "meow!"
1921
22+
2023class Human (object ):
2124 def __init__ (self ):
2225 self .name = "Human"
26+
2327 def speak (self ):
2428 return "'hello'"
2529
2630
2731class Car (object ):
2832 def __init__ (self ):
2933 self .name = "Car"
34+
3035 def make_noise (self , octane_level ):
3136 return "vroom{0}" .format ("!" * octane_level )
3237
@@ -37,18 +42,18 @@ class Adapter(object):
3742 Adapts an object by replacing methods.
3843 Usage:
3944 dog = Dog
40- dog = Adapter(dog, dict(make_noise =dog.bark))
45+ dog = Adapter(dog, dict(emit_sound =dog.bark))
4146
4247 >>> objects = []
4348 >>> dog = Dog()
44- >>> objects.append(Adapter(dog, dict(make_noise =dog.bark)))
49+ >>> objects.append(Adapter(dog, dict(emit_sound =dog.bark)))
4550 >>> cat = Cat()
46- >>> objects.append(Adapter(cat, dict(make_noise =cat.meow)))
51+ >>> objects.append(Adapter(cat, dict(emit_sound =cat.meow)))
4752 >>> human = Human()
48- >>> objects.append(Adapter(human, dict(make_noise =human.speak)))
53+ >>> objects.append(Adapter(human, dict(emit_sound =human.speak)))
4954 >>> car = Car()
5055 >>> car_noise = lambda: car.make_noise(3)
51- >>> objects.append(Adapter(car, dict(make_noise =car_noise)))
56+ >>> objects.append(Adapter(car, dict(emit_sound =car_noise)))
5257
5358 >>> for obj in objects:
5459 ... print('A {} goes {}'.format(obj.name, obj.make_noise()))
@@ -58,8 +63,8 @@ class Adapter(object):
5863 A Car goes vroom!!!
5964 """
6065
61- def __init__ (self , obj , adapted_methods ):
62- """We set the adapted methods in the object's dict """
66+ def __init__ (self , obj , ** adapted_methods ):
67+ """We set the adapted methods in the kwargs """
6368 self .obj = obj
6469 self .__dict__ .update (adapted_methods )
6570
@@ -71,16 +76,16 @@ def __getattr__(self, attr):
7176def main ():
7277 objects = []
7378 dog = Dog ()
74- objects .append (Adapter (dog , dict ( make_noise = dog .bark ) ))
79+ objects .append (Adapter (dog , emit_sound = dog .bark ))
7580 cat = Cat ()
76- objects .append (Adapter (cat , dict ( make_noise = cat .meow ) ))
81+ objects .append (Adapter (cat , emit_sound = cat .meow ))
7782 human = Human ()
78- objects .append (Adapter (human , dict ( make_noise = human .speak ) ))
83+ objects .append (Adapter (human , emit_sound = human .speak ))
7984 car = Car ()
80- objects .append (Adapter (car , dict ( make_noise = lambda : car .make_noise (3 ) )))
85+ objects .append (Adapter (car , emit_sound = lambda : car .make_noise (3 )))
8186
8287 for obj in objects :
83- print ("A {0} goes {1}" .format (obj .name , obj .make_noise ()))
88+ print ("A {0} goes {1}" .format (obj .name , obj .emit_sound ()))
8489
8590
8691if __name__ == "__main__" :
0 commit comments