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 参数列表中的self 显式不等于冗余
Dec 01 Python
python基础教程之缩进介绍
Aug 29 Python
一键搞定python连接mysql驱动有关问题(windows版本)
Apr 23 Python
windows下添加Python环境变量的方法汇总
May 14 Python
Python登录注册验证功能实现
Jun 18 Python
python tornado微信开发入门代码
Aug 24 Python
值得收藏,Python 开发中的高级技巧
Nov 23 Python
Python学习笔记之错误和异常及访问错误消息详解
Aug 08 Python
用python实现英文字母和相应序数转换的方法
Sep 18 Python
python 视频逐帧保存为图片的完整实例
Dec 10 Python
python同时遍历两个list用法说明
May 02 Python
详解Python 中的容器 collections
Aug 17 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
一个目录遍历函数
2006/10/09 PHP
Apache+php+mysql在windows下的安装与配置图解(最新版)
2008/11/30 PHP
ajax php 实现写入数据库
2009/09/02 PHP
遍历指定目录,并存储目录内所有文件属性信息的php代码
2016/10/28 PHP
PHP函数用法详解【初始化、嵌套、内置函数等】
2020/06/02 PHP
面向对象的javascript(笔记)
2009/10/06 Javascript
javascript 鼠标拖动图标技术
2010/02/07 Javascript
13个绚丽的Jquery 界面设计网站推荐
2010/09/28 Javascript
javascript学习笔记(七)利用javascript来创建和存储cookie
2011/04/08 Javascript
深入剖析JavaScript编程中的对象概念
2015/10/21 Javascript
Seajs是什么及sea.js 由来,特点以及优势
2016/10/13 Javascript
学习vue.js中class与style绑定
2016/12/03 Javascript
Javascript 高性能之递归,迭代,查表法详解及实例
2017/01/08 Javascript
初探nodeJS
2017/01/24 NodeJs
jQuery extend()详解及简单实例
2017/05/06 jQuery
谈谈React中的Render Props模式
2018/12/06 Javascript
Python运算符重载用法实例
2015/05/28 Python
Python实现将数据库一键导出为Excel表格的实例
2016/12/30 Python
python调用API实现智能回复机器人
2018/04/10 Python
浅谈利用numpy对矩阵进行归一化处理的方法
2018/07/11 Python
python面向对象法实现图书管理系统
2019/04/19 Python
python 并发编程 非阻塞IO模型原理解析
2019/08/20 Python
matplotlib 画双轴子图无法显示x轴的解决方法
2020/07/27 Python
Ooni英国官网:披萨烤箱
2020/05/31 全球购物
编程用JAVA解析XML的方式
2013/07/07 面试题
仓管员岗位职责范文
2013/11/08 职场文书
经理秘书求职自荐信范文
2014/03/23 职场文书
物流管理系毕业生求职信
2014/06/03 职场文书
普通党员对照检查材料
2014/09/24 职场文书
支行行长竞聘报告
2014/11/06 职场文书
实习工作表现评语
2014/12/31 职场文书
2015年消防工作总结
2015/04/24 职场文书
2019年最新七夕唯美祝福语(60条)
2019/07/22 职场文书
Nginx使用X-Accel-Redirect实现静态文件下载的统计、鉴权、防盗链、限速等
2021/04/04 Servers
Python万能模板案例之matplotlib绘制直方图的基本配置
2022/04/13 Python
mybatis-plus模糊查询指定字段
2022/04/28 Java/Android