通过实例方法名字的字符串调用方法
有三个类,分别是原形、三角形、长方形
它们都有一个求面积的方法,但是方法名各不相同
我们可以实现一个统一获取面积的函数
本例主要利用getattr方法获取对象中的属性。
三种形状的求面积方法名各不相同
通过迭代一个列表匹配外部map函数传进的对象的方法名,如果匹配成功则执行。
也可以直接传进一个对象求面积,而不用关心该对象的求面积方法名是什么
class Circle(object): """docstring for Circle""" def __init__(self,r): self.r = r def areaC(self): return self.r ** 2 * 3.14 class Triangle(object): """docstring for Triangle""" def __init__(self,a,b): self.a = a self.b = b def areaT(self): return self.a * self.b / 2 class Rectangle(object): """docstring for Rectangle""" def __init__(self,w,h): self.w = w self.h = h def areaR(self): return self.w * self.h shape1 = Circle(1) shape2 = Triangle(3,4) shape3 = Rectangle(3,4) def get_area(shape): for name in ('areaC','areaR','areaT'): f = getattr(shape,name,None) if f: return f() shapes = [shape1,shape2,shape3] print map(get_area,shapes) print get_area(shape1)
运行结果:
[3.14, 6, 12]
3.14