Skip to content

Commit b50a6e8

Browse files
committed
Doctest Adapter
1 parent ac7709e commit b50a6e8

1 file changed

Lines changed: 27 additions & 45 deletions

File tree

patterns/structural/adapter.py

Lines changed: 27 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -70,71 +70,53 @@ class Adapter(object):
7070
Usage:
7171
dog = Dog()
7272
dog = Adapter(dog, make_noise=dog.bark)
73+
"""
74+
75+
def __init__(self, obj, **adapted_methods):
76+
"""We set the adapted methods in the object's dict"""
77+
self.obj = obj
78+
self.__dict__.update(adapted_methods)
79+
80+
def __getattr__(self, attr):
81+
"""All non-adapted calls are passed to the object"""
82+
return getattr(self.obj, attr)
7383

84+
def original_dict(self):
85+
"""Print original object dict"""
86+
return self.obj.__dict__
87+
88+
89+
def main():
90+
"""
7491
>>> objects = []
7592
>>> dog = Dog()
7693
>>> print(dog.__dict__)
7794
{'name': 'Dog'}
95+
7896
>>> objects.append(Adapter(dog, make_noise=dog.bark))
97+
98+
>>> objects[0].__dict__['obj'], objects[0].__dict__['make_noise']
99+
(<...Dog object at 0x...>, <bound method Dog.bark of <...Dog object at 0x...>>)
100+
79101
>>> print(objects[0].original_dict())
80102
{'name': 'Dog'}
103+
81104
>>> cat = Cat()
82105
>>> objects.append(Adapter(cat, make_noise=cat.meow))
83106
>>> human = Human()
84107
>>> objects.append(Adapter(human, make_noise=human.speak))
85108
>>> car = Car()
86-
>>> car_noise = lambda: car.make_noise(3)
87-
>>> objects.append(Adapter(car, make_noise=car_noise))
109+
>>> objects.append(Adapter(car, make_noise=lambda: car.make_noise(3)))
88110
89111
>>> for obj in objects:
90-
... print('A {} goes {}'.format(obj.name, obj.make_noise()))
112+
... print("A {0} goes {1}".format(obj.name, obj.make_noise()))
91113
A Dog goes woof!
92114
A Cat goes meow!
93115
A Human goes 'hello'
94116
A Car goes vroom!!!
95117
"""
96118

97-
def __init__(self, obj, **adapted_methods):
98-
"""We set the adapted methods in the object's dict"""
99-
self.obj = obj
100-
self.__dict__.update(adapted_methods)
101-
102-
def __getattr__(self, attr):
103-
"""All non-adapted calls are passed to the object"""
104-
return getattr(self.obj, attr)
105-
106-
def original_dict(self):
107-
"""Print original object dict"""
108-
return self.obj.__dict__
109-
110-
111-
def main():
112-
113-
objects = []
114-
dog = Dog()
115-
print(dog.__dict__)
116-
objects.append(Adapter(dog, make_noise=dog.bark))
117-
print(objects[0].__dict__)
118-
print(objects[0].original_dict())
119-
cat = Cat()
120-
objects.append(Adapter(cat, make_noise=cat.meow))
121-
human = Human()
122-
objects.append(Adapter(human, make_noise=human.speak))
123-
car = Car()
124-
objects.append(Adapter(car, make_noise=lambda: car.make_noise(3)))
125-
126-
for obj in objects:
127-
print("A {0} goes {1}".format(obj.name, obj.make_noise()))
128-
129119

130120
if __name__ == "__main__":
131-
main()
132-
133-
### OUTPUT ###
134-
# {'name': 'Dog'}
135-
# {'make_noise': <bound method Dog.bark of <__main__.Dog object at 0x7f631ba3fb00>>, 'obj': <__main__.Dog object at 0x7f631ba3fb00>} # noqa flake8
136-
# {'name': 'Dog'}
137-
# A Dog goes woof!
138-
# A Cat goes meow!
139-
# A Human goes 'hello'
140-
# A Car goes vroom!!!
121+
import doctest
122+
doctest.testmod(optionflags=doctest.ELLIPSIS)

0 commit comments

Comments
 (0)