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中用Descriptor实现类级属性(Property)详解
Sep 18 Python
python分析nignx访问日志脚本分享
Feb 26 Python
基于Python如何使用AIML搭建聊天机器人
Jan 27 Python
python实现自动发送邮件发送多人、群发、多附件的示例
Jan 23 Python
python实现手机通讯录搜索功能
Feb 22 Python
在NumPy中创建空数组/矩阵的方法
Jun 15 Python
Python Web框架之Django框架cookie和session用法分析
Aug 16 Python
Django-xadmin后台导入json数据及后台显示信息图标和主题更改方式
Mar 11 Python
Virtualenv 搭建 Py项目运行环境的教程详解
Jun 22 Python
详解Python3 定义一个跨越多行的字符串的多种方法
Sep 06 Python
Django自带的用户验证系统实现
Dec 18 Python
2021年值得向Python开发者推荐的VS Code扩展插件
Jan 25 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中static,const与define的使用区别
2013/06/18 PHP
jquery操作select option 的代码小结
2011/06/21 Javascript
chrome原生方法之数组
2011/11/30 Javascript
你需要知道的10个最佳javascript开发实践小结
2012/04/15 Javascript
查找iframe里元素的方法可传参
2013/09/11 Javascript
使用变量动态设置js的属性名
2014/10/19 Javascript
jquery用ajax方式从后台获取json数据后如何将内容填充到下拉列表
2015/08/26 Javascript
JavaScript+html5 canvas制作的圆中圆效果实例
2016/01/27 Javascript
AngularJS ng-controller 指令简单实例
2016/08/01 Javascript
jQuery Easyui使用(一)之可折叠面板的布局手风琴菜单
2016/08/17 Javascript
全屏滚动插件fullPage.js使用实例解析
2016/10/21 Javascript
jQuery实现导航高亮的方法【附demo源码下载】
2016/11/09 Javascript
基于jquery实现二级联动效果
2017/03/30 jQuery
从零开始学习Node.js系列教程之设置HTTP头的方法示例
2017/04/13 Javascript
详解vue过滤器在v2.0版本用法
2017/06/01 Javascript
React入门教程之Hello World以及环境搭建详解
2017/07/11 Javascript
解决Vue2.0中使用less给元素添加背景图片出现的问题
2018/09/03 Javascript
package.json中homepage属性的作用详解
2020/03/11 Javascript
Python数据分析之真实IP请求Pandas详解
2016/11/18 Python
flask中主动抛出异常及统一异常处理代码示例
2018/01/18 Python
Django使用Mysql数据库已经存在的数据表方法
2018/05/27 Python
python验证码识别教程之利用滴水算法分割图片
2018/06/05 Python
Python后台开发Django的教程详解(启动)
2019/04/08 Python
pycharm new project变成灰色的解决方法
2019/06/27 Python
pip指定python位置安装软件包的方法
2019/07/12 Python
详解程序意外中断自动重启shell脚本(以Python为例)
2019/07/26 Python
加拿大时尚潮流大码女装购物网站:Addition Elle
2018/04/02 全球购物
Clearly新西兰:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
Scotch Porter官方网站:男士美容产品
2020/08/31 全球购物
电子商务专业自荐信
2014/06/02 职场文书
计划生育标语
2014/06/23 职场文书
关于群众路线的心得体会
2014/11/05 职场文书
一年级班主任工作总结2014
2014/11/08 职场文书
平遥古城导游词
2015/02/03 职场文书
仓库保管员岗位职责
2015/02/09 职场文书
python 管理系统实现mysql交互的示例代码
2021/12/06 Python