Skip to content

Commit b9b5ea3

Browse files
committed
Rename adapted method passing to adapter for avoid confusion about identical method names. Adapted methods transformed to keyword arguments for more convenient external interface.
1 parent 14e0307 commit b9b5ea3

1 file changed

Lines changed: 18 additions & 13 deletions

File tree

‎adapter.py‎

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,35 @@
33

44
"""http://ginstrom.com/scribbles/2008/11/06/generic-adapter-class-in-python/"""
55

6-
import os
76

87
class Dog(object):
98
def __init__(self):
109
self.name = "Dog"
10+
1111
def bark(self):
1212
return "woof!"
1313

14+
1415
class Cat(object):
1516
def __init__(self):
1617
self.name = "Cat"
18+
1719
def meow(self):
1820
return "meow!"
1921

22+
2023
class Human(object):
2124
def __init__(self):
2225
self.name = "Human"
26+
2327
def speak(self):
2428
return "'hello'"
2529

2630

2731
class 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):
7176
def 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

8691
if __name__ == "__main__":

0 commit comments

Comments
 (0)