soap接口怎么不返回tuple python_Python 中的接口
Python 是动态类型语言, 只在运行时做 Duck Typing 检查.
- 利: 灵活, 方便
- 弊: 代码混乱, 缺少规范
标准自带两类接口支持: abc 和 typing.Protocol, 有他们协助给天马行空的程序员套上枷锁, Python 的大工程才可以"上道"
abc
abc 就是 Abstract Base Class, 虚基类. 跟 Java, C++ 中的虚基类是一个意思, 可以对派生类提供实例化时的动态检查, 确保虚拟接口 (abstractmethod) 都有实现
import abcclass Base(abc.ABC): @abstractmethod def foo(self, s: str): """abc interface demo """class Invalid(Base): pass class Child(Base): def foo(self): pass c = Child()assert isinstance(c, Base)# TypeError: Can't instantiate abstract class Invalid with abstract methods fooi = Invalid()
也提供了非侵入式的虚基类关联方法
from abc import ABCclass MyABC(ABC): passMyABC.register(tuple)assert issubclass(tuple, MyABC)assert isinstance((), MyABC)
- 检查时机: 在运行中当派生类实例化时
- 检查范围: 只确保 abstractmethod 是否在派生类中有相同函数名实现, 并不检查实现的参数和返回值是否相同. 只看名字不比签名
- 代码影响: 侵入式, 需要继承. 也有手工非侵入式方案
typing.Protocol
structure subtyping (static duck-typing)
import typingclass Countable(typing.Protocol): def count(self, who: str) -> int: """support count """ class Counter: def count(self, who: str) -> int: return 0 c = Counter()def f(c: Countable): c.count("bill")
- 检查时机: 静态类型检查接口使用方, 例如 mypy
- 检查范围: 确保实现类按照签名实现了接口的全部函数
- 代码影响: 非侵入式, 不需要继承
比较
abc 类似 c++ 中的虚基类, typing.Protocol 则好比 c++ 中的 concept.
当然, Python 是动态语言, 在 typing.runtime_checkable 和 abc.abstractmethod 加成后, typing.Protocol 动静两相宜
import typing@typing.runtime_checkableclass Countable(typing.Protocol): @abc.abstractmethod def count(self, who: str) -> int: """support count """ class Counter: def count(self, who: str) -> int: return 0 assert issubclass(Counter, Countable)c = Counter()assert isinstance(c, Countable)def f(c: Countable): assert isinstance(c, Countable) print(c.count("bill")) f(c)class InvalidCounter(Countable): def c(self): pass # TypeError: Can't instantiate abstract class InvalidCounter with abstract methods counti = InvalidCounter()
上面这个终极解决方案兼有两者的优点:
- 静态类型检查时会确保是否在派生类中有相同签名的实现
- 动态运行时, 会检查是否同名函数存在
- 代码影响: 自动非侵入式, 不需要继承, 也无需手工注册
soap接口怎么不返回tuple python_Python 中的接口相关推荐
- vue与php接口对接,怎样使用vue项目中api接口
这次给大家带来怎样使用vue项目中api接口,使用vue项目中api接口的注意事项有哪些,下面就是实战案例,一起来看一下. 1. 在axiosconfig目录下的axiosConfig.jsimpor ...
- 计算机语言里的接口,使用VHDL语言开发计算机中的接口芯片
摘 要:讨论了 VHDL语言在 EDA中的诸多优点,结合定时/计数接口芯片的开发实例,讨论了ISP技术在电子设计自动化中的应用.同时给出了实例的具体例程和时序仿真波形. 关键词:在系统可编程:电子设 ...
- 接口和协议组成 游戏测试中的接口测试总结
一.游戏为什么要做接口测试 如果只是单纯做游戏的功能测试(黑盒),对于一些问题就无法测试到,游戏上线后会产生严重的后果. 举例子,重复领取奖励的问题:例如玩家完成一个任务后去领取奖励,领完奖励后[领取 ...
- java 方法里面定义接口_java – 当接口A在其方法签名中定义接口B时
-如何限制A的实现在方法签名中使用B的某个实现? 用例 这是一个Unit接口和两个实现它的枚举: public interface Unit { ... } public enum ForceUnit ...
- java 接口 签名机制_java – 当接口A在其方法签名中定义接口B时
-如何限制A的实现在方法签名中使用B的某个实现? 用例 这是一个Unit接口和两个实现它的枚举: public interface Unit { ... } public enum ForceUnit ...
- java实现什么接口进行排序_使用Java中Comparator接口实现自定义排序
一般情况下,自己动手写一个简单排序程序还是没有问题的,但是你能保证写出来的排序程序的时间复杂度吗?你能保证程序的正确性吗,鲁棒性呢,还有程序结构的清晰性,可维护性.......综上所述,学习一下排序接 ...
- 非NC模式对接工行接口,工行返回的xml报文转json
第一次写博客,写得不好请见谅! 公司本来有个旧项目是用PHP3.1开发的,结果现在增加了一个需求.项目要求:客户通过银行APP自助转账来入金到平台,平台则通过非NC方式对接工行接口出金.本来应该是没有 ...
- Unreal中Interface接口的使用
通过继承Unreal中的接口可以使不同的类有某种共同特性,这里记录一下接口的使用方式.Unreal中的接口分为两种:C++接口和蓝图接口,C++接口可在蓝图中使用;蓝图中的接口不能直接在C++中使用, ...
- java定义接口必用关键字_Java中定义接口的关键字是什么
Java中定义接口的关键字是什么 Java中定义接口的关键字是"interface"."interface"是面向对象编程语言中接口操作的关键字,功能是把所需成 ...
最新文章
- 2022-2028年中国K酸行业发展现状及前瞻分析报告
- pl/sql显示乱码
- 《STL源码剖析》学习--六大组件
- Visual Studio IDE环境下利用模板创建和手动配置CUDA项目教程
- 网络编程之如何通过URL获取网页代码
- 反转!物联网火爆,开发者却很难入门?
- 上海教育系统计算机职称考试报名,2008年第二季度上海市教育系统职称计算机考试报名的通知...
- Python学习笔记:PMT与PV函数
- python输入二维数组_python 二维数组键盘输入
- 那些让程序员提升30-80%的快捷键大全整理
- SVM多分类问题 :matlab中的应用
- “test.txt“ E212: 无法打开并写入文件 解决方法
- python之pygame安装教程_Pygame安装教程
- Qt开发笔记:OpenSSL库介绍、windows上mingw32版本的OpenSSL编译模块化
- 如何高效率安排你的时间?Mac精品日程管理软件推荐
- 什么是 Rax,以及 Rax 的特点
- 【只推荐一位】木东居士,带着大家一起成长的数据科学大神!
- 2.文献研读---基于学生成绩多变量数据挖掘的学习行为分析--单耀 王艺岚 张家华...
- 春节感悟 - 快递延误的售后问题
- 康奈尔大学计算机生物学是,康奈尔大学计算生物学难进吗?