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的Bottle框架中使用微信API的示例
Apr 23 Python
在Python的Django框架中显示对象子集的方法
Jul 21 Python
python搭建虚拟环境的步骤详解
Sep 27 Python
浅谈Python中的私有变量
Feb 28 Python
pycham查看程序执行的时间方法
Nov 29 Python
python爬虫获取新浪新闻教学
Dec 23 Python
Python实现的插入排序,冒泡排序,快速排序,选择排序算法示例
May 04 Python
Python中Flask-RESTful编写API接口(小白入门)
Dec 11 Python
python将图片转base64,实现前端显示
Jan 09 Python
用Python在Excel里画出蒙娜丽莎的方法示例
Apr 28 Python
Python测试框架:pytest学习笔记
Oct 20 Python
Python 实现PS滤镜的旋涡特效
Dec 03 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
CodeIgniter php mvc框架 中国网站
2008/05/26 PHP
PHP 变量类型的强制转换
2009/10/23 PHP
PHP动态生成javascript文件的2个例子
2014/04/11 PHP
PHP5.2下preg_replace函数的问题
2015/05/08 PHP
深入浅析用PHP实现MVC
2016/03/02 PHP
IE浏览器兼容Firefox的JS脚本的代码
2008/10/23 Javascript
jQuery第三课 修改元素属性及内容的代码
2010/03/14 Javascript
通过jQuery源码学习javascript(一)
2012/12/27 Javascript
用js模拟struts2的多action调用示例
2014/05/19 Javascript
用js闭包的方法实现多点标注冒泡示例
2014/05/29 Javascript
DOM节点深度克隆函数cloneNode()用法实例
2015/01/12 Javascript
JavaScript给按钮绑定点击事件(onclick)的方法
2015/04/07 Javascript
最简单纯JavaScript实现Tab标签页切换的方式(推荐)
2016/07/25 Javascript
jQuery实现动态添加、删除按钮及input输入框的方法
2017/04/27 jQuery
javascript 判断一个对象为数组的方法
2017/05/03 Javascript
对vue.js中this.$emit的深入理解
2018/02/23 Javascript
基于node搭建服务器,写接口,调接口,跨域的实例
2018/05/13 Javascript
微信小程序中进行地图导航功能的实现方法
2018/06/29 Javascript
解决vue 打包发布去#和页面空白的问题
2018/09/04 Javascript
[09:22]2014DOTA2西雅图国际邀请赛 主赛事第二日TOPPLAY
2014/07/21 DOTA
Python的自动化部署模块Fabric的安装及使用指南
2016/01/19 Python
Jupyter中直接显示Matplotlib的图形方法
2018/05/24 Python
python基于SMTP协议发送邮件
2019/05/31 Python
python3.4 将16进制转成字符串的实例
2019/06/12 Python
Tensorflow训练MNIST手写数字识别模型
2020/02/13 Python
Python sorted对list和dict排序
2020/06/09 Python
python实现视频压缩功能
2020/12/18 Python
Juice Beauty官网:有机美容产品,护肤与化妆品
2020/06/13 全球购物
POS解决方案:MUNBYN(热敏打印机、条形码扫描仪)
2020/06/09 全球购物
室内设计专业学生的自我评价分享
2013/11/27 职场文书
秋季红领巾广播稿
2014/01/27 职场文书
护士毕业自我鉴定
2014/02/07 职场文书
热爱祖国演讲稿
2014/05/04 职场文书
小学国旗下的演讲稿
2014/08/28 职场文书
阿里云服务器部署RabbitMQ集群的详细教程
2022/06/01 Servers
Python使用Web框架Flask开发项目
2022/06/01 Python