zoukankan      html  css  js  c++  java
  • python类与对象-如何通过实例方法名字的字符串调用方法

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

    问题举例

    在某项目中我们的代码用了三个不同库中的图形类:Circle,Triangle,Rectangle

    它们都有一个获取图形面积的接口,单接口名字可能不同,我们可以实现一个统一的获取

    面积的函数,使用每种方法名进行尝试,调用相应类的接口。

    解决思路

    方法一:使用内置函数getattr, 通过名字获取方法对象然后调用

    方法二:使用标准库operator下的methodcaller函数调用

    代码

    from lib1 import Circle
    from lib2 import Triangle
    from lib3 import Rectangle
    from operator import methodcaller
    
    def get_area(shape, method_name = ['area', 'get_area', 'getArea']):
        for name in method_name:
            if hasattr(shape, name):
                return methodcaller(name)(shape)
            # f = getattr(shape, name, None)
            # if f:
            #     return f()
    
    
    shape1 = Circle(1)
    shape2 = Triangle(3, 4, 5)
    shape3 = Rectangle(4, 6)
    
    shape_list = [shape1, shape2, shape3]
    # 获得面积列表
    area_list = list(map(get_area, shape_list))
    print(area_list)

    参考资料:python3实用编程技巧进阶

  • 相关阅读:
    第十二周作业
    第十一周作业
    第十周作业
    第九周作业
    第八周作业
    bzoj3561DZY Loves Math VI
    bzoj3529[Sdoi2014]数表
    bzoj3309DZY Loves Math
    bzoj2823[AHOI2012]信号塔
    bzoj2301[HAOI2011]Problem b
  • 原文地址:https://www.cnblogs.com/marton/p/10847882.html
Copyright © 2011-2022 走看看