Python-通过实例方法调用-统一接口的实现-getter methodcaller
某项目中,我们的代码使用的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的更多相关文章
- python使用suds调用webservice接口
最近做接口对接,遇到了.net开发的webservice接口,因为python第一次与webservice对接,连问带查,最后使用suds库来实现了 1.安装suds mac: sudo pip in ...
- python使用grpc调用rpc接口
proto文件: syntax = "proto3"; package coupon; // //message UnsetUseC2URequest { // int64 bid ...
- python调用zabbix接口实现Action配置
要写这篇博客其实我的内心是纠结的,老实说,我对zabbix的了解实在不多.但新公司的需求不容置疑,当我顶着有两个头大的脑袋懵懵转入运维领域时,面前摆着两百多组.上千台机器等着写入zabbix监控的需求 ...
- python调用ice接口
今天用python调用ice接口,遇到如下提示 ImportError: No module named Ice 解决方案是 set PYTHONPATH=C:\Program Files\ZeroC ...
- python调用RPC接口
要调用RPC接口,python提供了一个框架grpc,这是google开源的 rpc相关文档: https://grpc.io/docs/tutorials/basic/python.html 需要安 ...
- python 调用RESTFul接口
本周需要将爬虫爬下来的数据入库,因为之前已经写好PHP的接口的,可以直接通过python调用PHP接口来实现,所以把方法总结一下. //python编码问题,因为好久用,所以很容易出现 # -*- c ...
- Python调用API接口的几种方式 数据库 脚本
Python调用API接口的几种方式 2018-01-08 gaoeb97nd... 转自 one_day_day... 修改 微信分享: 相信做过自动化运维的同学都用过API接口来完成某些动作.AP ...
- #PHP#微信支付 第二篇 JSAPI 调用统一下单接口获取预支付交易数据
上一篇讲到成功获取 openid,本篇要调用微信统一接口创建预支付交易单,并获取到相关数据,以便(后边)在微信内调起H5支付 第三步,调用微信统一下单接口创建预支付交易单 微信统一下单API是微信支付 ...
- Python调用API接口的几种方式
Python调用API接口的几种方式 相信做过自动化运维的同学都用过API接口来完成某些动作.API是一套成熟系统所必需的接口,可以被其他系统或脚本来调用,这也是自动化运维的必修课. 本文主要介绍py ...
随机推荐
- vs使用fscanf和fprintf错误警告处理
严重性代码说明项目文件行 禁止显示状态错误 C4996 fopen('fscanf'.strcmp):This function or variable may be unsafe. 最全解决办法(转 ...
- LWPR
Scriptable Render Pipeline https://docs.unity3d.com/Manual/ScriptableRenderPipeline.html Unity轻量 ...
- 地图_SDK
不仅仅是Google,您必须知道的全球十大地图API https://blog.csdn.net/u013068887/article/details/79322096
- C III
http://cossacksworld.ucoz.co.uk/load/c_iii_files/79 http://cossacksworld.ucoz.co.uk/load/c_iii_files ...
- react-native 常用命令
创建项目 react-native init AwesomeProject //AwesomeProject是项目名 启动 Node.js web server react-native start ...
- 漏洞重温之sql注入(七)
漏洞重温之sql注入(七) sqli-labs通关之旅 Less-31 首先,进入31关,我们先添加上id参数. 然后,我们查看源码. 我们门可以看到,index页面源码其实很简单,网页也没有对我们的 ...
- 阿里云体验实验室 体验教程《Linux指令入门-系统管理》
体验平台简介 阿里云开发者实验室提供免费云资源和丰富的场景化实践,旨在帮助开发者在学习应用技术,了解阿里云产品的特性. 阿里云体验实验室地址:https://developer.aliyun.com/ ...
- 蒲公英 · JELLY技术周刊 Vol.21 -- 技术周刊 · React Hooks vs Vue 3 + Composition API
蒲公英 · JELLY技术周刊 Vol.21 选 React 还是 Vue,每个人心中都会有自己的答案,有很多理由去 pick 心水的框架,但是当我们扪心自问,我们真的可以公正的来评价这两者之间的差异 ...
- 2020 最新python入门知识
1. 基础语法 1.1 注释 在编写代码的时候,有些代码不需要执行或增加代码说明,那么就需要用到注释了. 被注释的文本或代码是不会被执行的. 注释可以使用如下三种方式: # 号 # 第一个注释,本行代 ...
- java 求水仙花数
package com.yc.bean; public class ShuiXianHua { public static void main(String[] args) { /** * 题目:打印 ...