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创建和使用字典实例详解
Nov 01 Python
解析Mac OS下部署Pyhton的Django框架项目的过程
May 03 Python
python机器学习之神经网络(一)
Dec 20 Python
python消费kafka数据批量插入到es的方法
Dec 27 Python
Python发展简史 Python来历
May 14 Python
python 弹窗提示警告框MessageBox的实例
Jun 18 Python
pandas实现to_sql将DataFrame保存到数据库中
Jul 03 Python
python3 打印输出字典中特定的某个key的方法示例
Jul 06 Python
Python 调用 Windows API COM 新法
Aug 22 Python
python3 pillow模块实现简单验证码
Oct 31 Python
selenium如何定位span元素的实现
Jan 13 Python
浅谈哪个Python库才最适合做数据可视化
Jun 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
玛琪朵 Macchiato
2021/03/03 咖啡文化
PHP中实现图片的锐化
2006/10/09 PHP
php获得用户ip地址的比较不错的方法
2014/02/08 PHP
PHP 7.0.2 正式版发布
2016/01/08 PHP
PHP自定义函数实现格式化秒的方法
2016/09/14 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
Javascript下判断是否为闰年的Datetime包
2010/10/26 Javascript
远离JS灾难css灾难之 js私有函数和css选择器作为容器
2011/12/11 Javascript
玩转方法:call和apply
2014/05/08 Javascript
javascript框架设计读书笔记之数组的扩展与修复
2014/12/02 Javascript
JavaScript数据结构与算法之栈详解
2015/03/12 Javascript
JavaScript中几种排序算法的简单实现
2015/07/29 Javascript
jquery 动态合并单元格的实现方法
2016/08/26 Javascript
node.js 和HTML5开发本地桌面应用程序
2016/12/13 Javascript
JS实现的驼峰式和连字符式转换功能分析
2016/12/21 Javascript
Angularjs自定义指令实现三级联动 选择地理位置
2017/02/13 Javascript
BootstrapTable refresh 方法使用实例简单介绍
2017/02/20 Javascript
lhgcalendar时间插件限制只能选择三个月的实现方法
2017/07/03 Javascript
vue2中使用sass并配置全局的sass样式变量的方法
2018/09/04 Javascript
[01:06:39]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第三局
2016/03/02 DOTA
pandas数据框,统计某列数据对应的个数方法
2018/04/11 Python
树莓派3 搭建 django 服务器的实例
2019/08/29 Python
scrapy中如何设置应用cookies的方法(3种)
2020/09/22 Python
法国床上用品商店:La Compagnie du lit
2019/12/26 全球购物
经济管理专业毕业生自荐信范文
2014/01/02 职场文书
学习标兵获奖感言
2014/02/20 职场文书
职业生涯规划书范文
2014/03/10 职场文书
毕业生如何写自荐信
2014/03/26 职场文书
中学生演讲稿
2014/04/26 职场文书
文艺演出策划方案
2014/06/07 职场文书
先进事迹演讲稿
2014/09/01 职场文书
信访稳定工作汇报
2014/10/27 职场文书
给老师的保证书怎么写
2015/05/09 职场文书
2016大一新生军训心得体会
2016/01/11 职场文书
2019企业文化管理制度范本!
2019/08/06 职场文书
不同品牌、不同型号对讲机如何互相通联
2022/02/18 无线电