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调用C/C++动态链接库的方法详解
Jul 22 Python
python中的五种异常处理机制介绍
Sep 02 Python
Python中获取网页状态码的两个方法
Nov 03 Python
Python使用文件锁实现进程间同步功能【基于fcntl模块】
Oct 16 Python
用matplotlib画等高线图详解
Dec 14 Python
使用python采集脚本之家电子书资源并自动下载到本地的实例脚本
Oct 23 Python
python scp 批量同步文件的实现方法
Jan 03 Python
Django发送邮件和itsdangerous模块的配合使用解析
Aug 10 Python
python批量处理文件或文件夹
Jul 28 Python
Django 框架模型操作入门教程
Nov 05 Python
详解numpy1.19.4与python3.9版本冲突解决
Dec 15 Python
python中常用的数据结构介绍
Jan 12 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
配置eAccelerator和XCache扩展来加速PHP程序的执行
2015/12/22 PHP
PHP实现的mysql读写分离操作示例
2018/05/22 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
2018/07/17 PHP
PHP实现二维数组按照指定的字段进行排序算法示例
2019/04/23 PHP
js cookies实现简单统计访问次数
2009/11/24 Javascript
javascript代码编写需要注意的7个小细节小结
2011/09/21 Javascript
jQuery 数据缓存模块进化史详细介绍
2012/11/19 Javascript
批量实现面向对象的实例代码
2013/07/01 Javascript
js获取系统的根路径实现介绍
2013/09/08 Javascript
jquery.cookie用法详细解析
2013/12/18 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
2015/08/24 Javascript
跟我学习javascript的垃圾回收机制与内存管理
2015/11/23 Javascript
jquery常用的12个小功能
2016/07/22 Javascript
详解nodejs 文本操作模块-fs模块(五)
2016/12/23 NodeJs
ECMAScript6 新特性范例大全
2017/03/24 Javascript
Vue.js移动端左滑删除组件的实现代码
2017/09/08 Javascript
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
2018/05/28 Javascript
在Vue 中使用Typescript的示例代码
2018/09/10 Javascript
vue+vant使用图片预览功能ImagePreview的问题解决
2020/04/10 Javascript
linux服务器快速卸载安装node环境(简单上手)
2021/02/22 Javascript
比较详细Python正则表达式操作指南(re使用)
2008/09/06 Python
在Python中使用元类的教程
2015/04/28 Python
Python的“二维”字典 (two-dimension dictionary)定义与实现方法
2016/04/27 Python
python 获取网页编码方式实现代码
2017/03/11 Python
Python延时操作实现方法示例
2018/08/14 Python
使用python代码进行身份证号校验的实现示例
2019/11/21 Python
pytorch 求网络模型参数实例
2019/12/30 Python
利用css3制作3D样式按钮实现代码
2013/03/18 HTML / CSS
音乐学专业求职信
2014/07/22 职场文书
高中生第一学年自我鉴定
2014/09/12 职场文书
2014年政府采购工作总结
2014/12/09 职场文书
个人承诺书格式范文
2015/04/29 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书
2016年中学法制宣传日活动总结
2016/04/01 职场文书
mysql 8.0.24版本安装配置方法图文教程
2021/05/12 MySQL
Python自动化爬取天眼查数据的实现
2021/06/15 Python