python(Class8)

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


内置函数getattr
标准库operator下的methodcaller函数




class Circle(object):
    def __init__(self, r):
        self._r = r

    def area(self):
        return self._r ** 2 * 3.14


class Rectangle(object):
    def __init__(self, w, h):
        self._w = w
        self._h = h

    def get_area(self):
        return self._w * self._h


class Triangle(object):
    def __init__(self, a, b, c):
        self._a = a
        self._b = b
        self._c = c

    def getArea(self):
        a, b, c = self._a, self._b, self._c
        p = (a+b+c)/2
        return (p*(p-a)*(p-b)*(p-c)) ** 0.5


def getarea(shape):
    for name in ('area', 'get_area', 'getArea'):
        f = getattr(shape, name, None)
        if f:
            return f()

shape1 = Circle(2)
shape2 = Rectangle(6, 4)
shape3 = Triangle(3, 4, 5)

shapes = [shape1, shape2, shape3]

print(list(map(getarea, shapes)))

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,455评论 0 4
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 9,431评论 1 10
  • 两本不错的书: 《Python参考手册》:对Python各个标准模块,特性介绍的比较详细。 《Python核心编程...
    静熙老师哈哈哈阅读 8,623评论 0 80
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,384评论 19 139
  • 随着上课模式的更新,老师“施教者”的角色更加弱化,但是老师的鼓励对孩子依然非常重要。我们面对是群体是少年儿童,他们...
    lhysolo阅读 1,696评论 0 0