适配器模式:由于系统调用方式的原因,需要把不同类里面的方法(名字不一样),用同样的方式来调用;
# -*- coding: utf-8 -*-
class Bird:
def fly(self):
print('bird is flying ...')
class Dog:
def bark(self):
print('dog is barking ...')
class People:
def speak(self):
print('people is speaking ...')
class Adapter:
def __init__(self, clz_name, method):
self.clz_name = clz_name
self.__dict__.update(method)
def __getattr__(self, item):
'''复写getattr使其在适配器函数查无方法的时候,执行getattr魔法方法'''
return getattr(self.clz_name, item)
if __name__ == '__main__':
dog = Dog()
bird = Bird()
people = People()
objects = []
objects.append(Adapter(dog, dict(test=dog.bark)))
objects.append(Adapter(bird, dict(test=dog.bark)))
objects.append(Adapter(people, dict(test=dog.bark)))
for object in objects:
object.test()
# Adapter(dog, dict(tes1t=dog.bark)).tes1t()
# Adapter(bird, dict(tes2t=bird.fly)).tes2t()
# Adapter(people, dict(tes3t=people.speak)).tes3t()