通过实例方法名字的字符串调用方法

有三个类,分别是原形、三角形、长方形

它们都有一个求面积的方法,但是方法名各不相同

我们可以实现一个统一获取面积的函数

本例主要利用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
posted @ 2020-09-23 13:10  Edward_han  阅读(221)  评论(0编辑  收藏  举报