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


Posted in Python onMarch 21, 2018

本文实例为大家分享了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 相关文章推荐
Python程序设计入门(3)数组的使用
Jun 16 Python
Python中for循环和while循环的基本使用方法
Aug 21 Python
Python实现删除时保留特定文件夹和文件的示例
Apr 27 Python
Python打包方法Pyinstaller的使用
Oct 09 Python
python实现画五角星和螺旋线的示例
Jan 20 Python
Python 存储字符串时节省空间的方法
Apr 23 Python
Pandas数据离散化原理及实例解析
Nov 16 Python
python 输出列表元素实例(以空格/逗号为分隔符)
Dec 25 Python
python实现PDF中表格转化为Excel的方法
Jun 16 Python
python的数学算法函数及公式用法
Nov 18 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
Dec 10 Python
Python实现微信表情包炸群功能
Jan 28 Python
python如何为被装饰的函数保留元数据
Mar 21 #Python
15行Python代码带你轻松理解令牌桶算法
Mar 21 #Python
Python反转序列的方法实例分析
Mar 21 #Python
Python常见工厂函数用法示例
Mar 21 #Python
python如何统计序列中元素
Jul 31 #Python
python如何读写json数据
Mar 21 #Python
python如何读写csv数据
Mar 21 #Python
You might like
php 检查电子邮件函数(自写)
2014/01/16 PHP
PHP 验证登陆类分享
2015/03/13 PHP
php表单加入Token防止重复提交的方法分析
2016/10/10 PHP
PHP中使用OpenSSL生成证书及加密解密
2017/02/05 PHP
详解PHP中的序列化、反序列化操作
2017/03/21 PHP
有关DOM元素与事件的3个谜题
2010/11/11 Javascript
Javascript面向对象编程(二) 构造函数的继承
2011/08/28 Javascript
基于JavaScript 下namespace 功能的简单分析
2013/07/05 Javascript
javascript模拟地球旋转效果代码实例
2013/12/02 Javascript
JavaScript中的prototype原型学习指南
2016/05/09 Javascript
原生JS实现的放大镜效果实例代码
2016/10/15 Javascript
JS键盘版计算器的制作方法
2016/12/03 Javascript
JavaScript 中调用 Kotlin 方法实例详解
2017/06/09 Javascript
JS中使用gulp实现压缩文件及浏览器热加载功能
2017/07/12 Javascript
JavaScript编写的网页小游戏,很给力
2017/08/18 Javascript
Angularjs中数据绑定的实例详解
2017/08/25 Javascript
Angular中的ng-template及angular 使用ngTemplateOutlet 指令的方法
2018/08/08 Javascript
JavaScript数据结构之栈实例用法
2019/01/18 Javascript
Python编程实现二叉树及七种遍历方法详解
2017/06/02 Python
python实现员工管理系统
2018/01/11 Python
centos 安装python3.6环境并配置虚拟环境的详细教程
2018/02/22 Python
Django学习教程之静态文件的调用详解
2018/05/08 Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
2018/06/19 Python
基于随机梯度下降的矩阵分解推荐算法(python)
2018/08/31 Python
python实现任意位置文件分割的实例
2018/12/14 Python
解决nohup执行python程序log文件写入不及时的问题
2019/01/14 Python
python+selenium 定位到元素,无法点击的解决方法
2019/01/30 Python
Python参数解析模块sys、getopt、argparse使用与对比分析
2019/04/02 Python
Python如何实现邮件功能
2020/05/27 Python
Python调用百度OCR实现图片文字识别的示例代码
2020/07/17 Python
Html5 FileReader实现即时上传图片功能实例代码
2014/09/01 HTML / CSS
h5页面背景图很长要有滚动条滑动效果的实现
2021/01/27 HTML / CSS
秘鲁购物网站:Linio秘鲁
2017/04/07 全球购物
教师节促销活动方案
2014/02/14 职场文书
幼儿园教学随笔感言
2014/02/23 职场文书
市场营销专业求职信
2014/06/17 职场文书