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中的一些类型转换函数小结
Feb 10 Python
Python网络爬虫项目:内容提取器的定义
Oct 25 Python
Python实现的单向循环链表功能示例
Nov 10 Python
Python数据分析库pandas基本操作方法
Apr 08 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
May 15 Python
python装饰器相当于函数的调用方式
Dec 27 Python
Python识别html主要文本框过程解析
Feb 18 Python
pandas 强制类型转换 df.astype实例
Apr 09 Python
解决pycharm导入本地py文件时,模块下方出现红色波浪线的问题
Jun 01 Python
python识别验证码的思路及解决方案
Sep 13 Python
python人工智能human learn绘图可创建机器学习模型
Nov 23 Python
python中对列表的删除和添加方法详解
Feb 24 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对MongoDB[NoSQL]数据库的操作
2013/03/01 PHP
如何在php中正确的使用json
2013/08/06 PHP
ThinkPHP实现事务回滚示例代码
2014/06/23 PHP
PHP以json或xml格式返回请求数据的方法
2018/05/31 PHP
javascript应用:Iframe自适应其加载的内容高度
2007/04/10 Javascript
javascript页面渲染速度测试脚本分享
2014/04/15 Javascript
分享15个大家都熟知的jquery小技巧
2015/12/02 Javascript
javascript类型系统 Array对象学习笔记
2016/01/09 Javascript
JavaScript实现多种排序算法
2016/02/24 Javascript
解析微信JS-SDK配置授权,实现分享接口
2016/12/09 Javascript
js 递归和定时器的实例解析
2017/02/03 Javascript
js禁止浏览器的回退事件
2017/04/20 Javascript
ionic实现底部分享功能
2017/05/11 Javascript
使用 Node.js 对文本内容分词和关键词抽取
2017/05/27 Javascript
关于javascript获取内联样式与嵌入式样式的实例
2017/06/01 Javascript
使用jQuery实现两个div中按钮互换位置的实例代码
2017/09/21 jQuery
vue进行图片的预加载watch用法实例讲解
2018/02/07 Javascript
jquery.param()实现数组或对象的序列化方法
2018/10/08 jQuery
js前端如何写一个精确的倒计时代码
2019/10/25 Javascript
[02:58]献给西雅图的情书_高清
2014/05/29 DOTA
[01:29]Ti4循环赛第三日精彩回顾
2014/07/13 DOTA
详解Python中用于计算指数的exp()方法
2015/05/14 Python
使用Python爬了4400条淘宝商品数据,竟发现了这些“潜规则”
2018/03/23 Python
python跳过第一行快速读取文件内容的实例
2018/07/12 Python
tensorflow 初始化未初始化的变量实例
2020/02/06 Python
python 窃取摄像头照片的实现示例
2021/01/08 Python
python 实现网易邮箱邮件阅读和删除的辅助小脚本
2021/03/01 Python
销售工作岗位职责
2013/12/24 职场文书
机械制造毕业生求职信
2014/03/03 职场文书
校园学雷锋活动月总结
2014/03/09 职场文书
航海技术专业毕业生推荐信
2014/07/09 职场文书
公司庆典欢迎词
2015/01/26 职场文书
租车协议书
2015/01/27 职场文书
幼儿园安全教育月活动总结
2015/05/08 职场文书
运动会通讯稿100字
2015/07/20 职场文书
CSS3 制作的悬停缩放特效
2021/04/13 HTML / CSS