python如何通过实例方法名字调用方法

 更新时间:2018年03月21日 11:19:18   作者:北门吹雪  
这篇文章主要为大家详细介绍了python如何通过实例方法名字调用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了python通过实例方法名字调用方法的具体代码,供大家参考,具体内容如下

案例:

       某项目中,我们的代码使用的2个不同库中的图形类:

              Circle,Triangle

       这两个类中都有一个获取面积的方法接口,但是接口的名字不一样

       需求:

              统一这些接口,不关心具体的接口,只要我调用统一的接口,对应的面积就会计算出来

如何解决这个问题?

定义一个统一的接口函数,通过反射:getattr进行接口调用

#!/usr/bin/python3
 
from math import pi
 
 
class Circle(object):
 def __init__(self, radius):
  self.radius = radius
 
 def getArea(self):
  return round(pow(self.radius, 2) * pi, 2)
 
 
class Rectangle(object):
 def __init__(self, width, height):
  self.width = width
  self.height = height
 
 def get_area(self):
  return self.width * self.height
 
 
# 定义统一接口
def func_area(obj):
 # 获取接口的字符串
 for get_func in ['get_area', 'getArea']:
  # 通过反射进行取方法
  func = getattr(obj, get_func, None)
  if func:
   return func()
  
 
if __name__ == '__main__':
 c1 = Circle(5.0)
 r1 = Rectangle(4.0, 5.0)
  
 # 通过map高阶函数,返回一个可迭代对象
 erea = map(func_area, [c1, r1])
 print(list(erea)) 

通过标准库operator中methodcaller方法进行调用

#!/usr/bin/python3
 
from math import pi
from operator import methodcaller
 
 
class Circle(object):
 def __init__(self, radius):
  self.radius = radius
 
 def getArea(self):
  return round(pow(self.radius, 2) * pi, 2)
 
 
class Rectangle(object):
 def __init__(self, width, height):
  self.width = width
  self.height = height
   
 def get_area(self):
  return self.width * self.height
 
if __name__ == '__main__':
 c1 = Circle(5.0)
 r1 = Rectangle(4.0, 5.0)
  
 # 第一个参数是函数字符串名字,后面是函数要求传入的参数,执行括号中传入对象
 erea_c1 = methodcaller('getArea')(c1)
 erea_r1 = methodcaller('get_area')(r1)
 print(erea_c1, erea_r1)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • python中实现php的var_dump函数功能

    python中实现php的var_dump函数功能

    这篇文章主要介绍了python中实现php的var_dump函数功能,var_dump函数在PHP中调试时非常实用,本文介绍在Python中实现这个函数,需要的朋友可以参考下
    2015-01-01
  • python实现多线程及线程间通信的简单方法

    python实现多线程及线程间通信的简单方法

    这篇文章主要为大家介绍了python实现多线程及线程间通信的简单方法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Python使用pymeter操作JMeter的教程详解

    Python使用pymeter操作JMeter的教程详解

    pymeter 是一个 Python 库,它可以以编程方式创建和运行 JMeter 测试计划,下面就跟随小编一起来看看Python如何使用pymeter操作JMeter的吧
    2024-01-01
  • python常见的格式化输出小结

    python常见的格式化输出小结

    今天在写代码的时候,需要统一化输出格式进行,一时想不起竟具体细节,用了最笨的方法,所以觉得有必要将常见的方法进行一个总结。下面这篇文中就给大家总结了python中常见的格式化输出,比如打印字符串、打印整数和打印浮点数等,下面来看看详细的输出方法吧。
    2016-12-12
  • Python随机函数random随机获取数字、字符串、列表等使用详解

    Python随机函数random随机获取数字、字符串、列表等使用详解

    这篇文章主要介绍了Python随机函数random使用详解包含了Python随机数字,Python随机字符串,Python随机列表等,需要的朋友可以参考下
    2021-04-04
  • Python中return self的用法详解

    Python中return self的用法详解

    这篇文章主要介绍了Python中return self的用法,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-07-07
  • Python分支结构(switch)操作简介

    Python分支结构(switch)操作简介

    这篇文章主要介绍了Python分支结构(switch)操作简介,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • Python的ini配置文件你了解吗

    Python的ini配置文件你了解吗

    这篇文章主要为大家详细介绍了Python的ini配置文件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • 详解python网络进程

    详解python网络进程

    进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。本文将介绍python实现网络进程
    2021-06-06
  • python字符串定义的三种方式

    python字符串定义的三种方式

    在Python中,字符串是一个非常重要的数据类型,可用来存储和操作文本数据,本文主要介绍了python字符串定义的三种方式,具有一定的参考价值,感兴趣的可以了解一下
    2023-05-05

最新评论