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系列之从文件读取和保存数据
May 23 Python
在Django的URLconf中使用命名组的方法
Jul 18 Python
python 循环遍历字典元素的简单方法
Sep 11 Python
请不要重复犯我在学习Python和Linux系统上的错误
Dec 12 Python
在python win系统下 打开TXT文件的实例
Apr 29 Python
python中报错"json.decoder.JSONDecodeError: Expecting value:"的解决
Apr 29 Python
Django中如何使用sass的方法步骤
Jul 09 Python
Python爬虫 urllib2的使用方法详解
Sep 23 Python
详解pycharm连接不上mysql数据库的解决办法
Jan 10 Python
利用Python将图片中扭曲矩形的复原
Sep 07 Python
基于python实现坦克大战游戏
Oct 27 Python
基于python制作简易版学生信息管理系统
Apr 20 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常量的详解
2013/06/09 PHP
关于PHP session 存储方式的详细介绍
2013/06/25 PHP
destoon实现首页显示供应、企业、资讯条数的方法
2014/07/15 PHP
JavaScript 构造函数 面相对象学习必备知识
2010/06/09 Javascript
js的.innerHTML = ""IE9下显示有错误的解决方法
2013/09/16 Javascript
设置checkbox为只读(readOnly)的两种方式
2013/10/11 Javascript
Javascript实现带关闭按钮的网页漂浮广告代码
2014/01/12 Javascript
window.open()详解及浏览器兼容性问题示例探讨
2014/05/29 Javascript
javascript+HTML5的Canvas实现Lab单车动画效果
2015/08/07 Javascript
快速学习jQuery插件 jquery.validate.js表单验证插件使用方法
2015/12/01 Javascript
jquery特效 点击展示与隐藏全文
2015/12/09 Javascript
浅谈JS正则表达式的RegExp对象和括号的使用
2016/07/28 Javascript
JQuery的加载和选择器用法简单示例
2019/05/13 jQuery
Vue中图片Src使用变量的方法
2019/10/30 Javascript
详解webpack的clean-webpack-plugin插件报错
2020/10/16 Javascript
原生js实现放大镜组件
2021/01/22 Javascript
Element-ui 自带的两种远程搜索(模糊查询)用法讲解
2021/01/29 Javascript
[01:17:47]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
35个Python编程小技巧
2014/04/01 Python
python求列表交集的方法汇总
2014/11/10 Python
Pandas GroupBy对象 索引与迭代方法
2018/11/16 Python
PyQt5 加载图片和文本文件的实例
2019/06/14 Python
pandas的to_datetime时间转换使用及学习心得
2019/08/11 Python
python实现文件批量编码转换及注意事项
2019/10/14 Python
Python如何通过百度翻译API实现翻译功能
2020/04/02 Python
keras 两种训练模型方式详解fit和fit_generator(节省内存)
2020/07/03 Python
Html5 语法与规则简要概述
2014/07/29 HTML / CSS
Canvas在超级玛丽游戏中的应用详解
2021/02/06 HTML / CSS
Prototype如何为一个Ajax添加一个参数
2015/12/06 面试题
2013年办公室秘书的个人自我鉴定
2013/10/24 职场文书
大学生学年自我鉴定
2014/02/10 职场文书
新闻传播专业求职信
2014/07/22 职场文书
经济贸易系求职信
2014/08/04 职场文书
入党个人总结范文
2015/03/02 职场文书
同学聚会致辞集锦
2015/07/28 职场文书
2016关于读书活动的心得体会
2016/01/14 职场文书