某项目中,我们的代码使用的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-通过实例方法调用-统一接口的实现-getter methodcaller的更多相关文章

  1. python使用suds调用webservice接口

    最近做接口对接,遇到了.net开发的webservice接口,因为python第一次与webservice对接,连问带查,最后使用suds库来实现了 1.安装suds mac: sudo pip in ...

  2. python使用grpc调用rpc接口

    proto文件: syntax = "proto3"; package coupon; // //message UnsetUseC2URequest { // int64 bid ...

  3. python调用zabbix接口实现Action配置

    要写这篇博客其实我的内心是纠结的,老实说,我对zabbix的了解实在不多.但新公司的需求不容置疑,当我顶着有两个头大的脑袋懵懵转入运维领域时,面前摆着两百多组.上千台机器等着写入zabbix监控的需求 ...

  4. python调用ice接口

    今天用python调用ice接口,遇到如下提示 ImportError: No module named Ice 解决方案是 set PYTHONPATH=C:\Program Files\ZeroC ...

  5. python调用RPC接口

    要调用RPC接口,python提供了一个框架grpc,这是google开源的 rpc相关文档: https://grpc.io/docs/tutorials/basic/python.html 需要安 ...

  6. python 调用RESTFul接口

    本周需要将爬虫爬下来的数据入库,因为之前已经写好PHP的接口的,可以直接通过python调用PHP接口来实现,所以把方法总结一下. //python编码问题,因为好久用,所以很容易出现 # -*- c ...

  7. Python调用API接口的几种方式 数据库 脚本

    Python调用API接口的几种方式 2018-01-08 gaoeb97nd... 转自 one_day_day... 修改 微信分享: 相信做过自动化运维的同学都用过API接口来完成某些动作.AP ...

  8. #PHP#微信支付 第二篇 JSAPI 调用统一下单接口获取预支付交易数据

    上一篇讲到成功获取 openid,本篇要调用微信统一接口创建预支付交易单,并获取到相关数据,以便(后边)在微信内调起H5支付 第三步,调用微信统一下单接口创建预支付交易单 微信统一下单API是微信支付 ...

  9. Python调用API接口的几种方式

    Python调用API接口的几种方式 相信做过自动化运维的同学都用过API接口来完成某些动作.API是一套成熟系统所必需的接口,可以被其他系统或脚本来调用,这也是自动化运维的必修课. 本文主要介绍py ...

随机推荐

  1. vue混入mixins时注意的问题

    mixin.js - 方式一:导出对象 const mixin = { mounted () { console.log('fffffffffffff') }, methods: { } } expo ...

  2. go微服务系列(四) - http api中引入protobuf

    1. protobuf相关依赖安装 2. 改造之前的client 2.1 新建proto文件 2.2 运行protoc命令生成go文件 2.3 然后把原来的map修改成具体的类型就可以了 3. 处理j ...

  3. Nginx Ingress 高并发实践

    概述 Nginx Ingress Controller 基于 Nginx 实现了 Kubernetes Ingress API,Nginx 是公认的高性能网关,但如果不对其进行一些参数调优,就不能充分 ...

  4. javaScript 推荐书籍 由简单到入门,初级到高级。

  5. lidar激光雷达领域的分类

    lidar领域可以按分为以下五方面: 激光雷达系统与装备 激光雷达系统与开发 激光雷达光源 激光雷达探测 多光谱激光雷达系统 单光子激光雷达系统 低成本RGB-D距离传感器 激光雷达元器件及装备等 激 ...

  6. Codeforces 1321E World of Darkraft: Battle for Azathoth

    题意 有\(n\)个武器,第\(i\)个武器攻击力为\(a_i\),价值\(ca_i\). 有\(m\)个防具,第\(i\)个防具防御力为\(b_i\),价值\(cb_i\). 有\(p\)个怪,第\ ...

  7. 每日一道 LeetCode (41):阶乘后的零

    每天 3 分钟,走上算法的逆袭之路. 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub: https://github.com/meteor1993/LeetCode Gitee ...

  8. 【Gin-API系列】部署和监控(九)

    本文是[Gin-API系列]的最后一篇文章,简单介绍如何在生产环境的部署架构和监控手段. 生产部署 部署架构 使用Nginx加Keepalived的方式搭建,可以达到高可用的效果,并可以横向扩容 如何 ...

  9. Q200510-03-02: LRU缓存机制

    问题: LRU缓存机制运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制.它应该支持以下操作: 获取数据 get 和 写入数据 put . 获取数据 get(key) - 如果 ...

  10. jackson读取json tree讲解

    待读取的json文本: {"data":{"count":4031,"list":[{"symbol":"SH ...