soap接口怎么不返回tuple python_Python 中的接口

Python 是动态类型语言, 只在运行时做 Duck Typing 检查.

  • 利: 灵活, 方便
  • 弊: 代码混乱, 缺少规范

标准自带两类接口支持: abc 和 typing.Protocol, 有他们协助给天马行空的程序员套上枷锁, Python 的大工程才可以"上道"

cfa9d45a6ffba5d3966d43723a10583d.png

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()

上面这个终极解决方案兼有两者的优点:

  • 静态类型检查时会确保是否在派生类中有相同签名的实现
  • 动态运行时, 会检查是否同名函数存在
  • 代码影响: 自动非侵入式, 不需要继承, 也无需手工注册

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454235.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 第11次作业:你能看懂就说明你理解了——this关键字

this 代表当前对象 转载于:https://www.cnblogs.com/qingyundian/p/7736699.html

c#多线程操作界面控件的简单实现

一个小功能,早有人实现了。自己在一个项目中用到,觉得有必要记录一下,写下来。代码 从上面你可能已经看出如何多线程操作同一个控件的,就是通过一个委托,然后定义委托方法,判断控件的InvokeRequired属性&am…

ssh 免密_Linux下配置SSH免密通信 “sshkeygen”的基本用法

利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。1 什么是SSH引用百度百科的说明:SSH 为 Secure Shell的缩写,由 IETF 的网络小组(Network Working Group)所制定;它是…

Python 第三方模块之 NumPy - 科学计算

NumPy 简介 NumPy 发展历史 1995年 Jim HugUNin开发了Numeric。随后,Numarray包诞生。Travis Oliphants整合Numeric和Numarray,开发Numpy,于2006年发布第一个版本。Numpy(Numeric Python)提供了许多高级的数值编程工…

Python 第三方模块之 matplotlib - 绘图库

简介 matplotlib是受MATLAB的启发构建的。MATLAB是数据绘图领域广泛使用的语言和工具。MATLAB语言是面向过程的。利用函数的调用,MATLAB中可以轻松的利用一行命令来绘制直线,然后再用一系列的函数调整结果。 matplotlib有一套完全仿照MATLAB的函数形式…

微软P2V工具之Disk2VHD

虚拟化经过最近几年的发展,已经有很多的应用和服务迁移到了虚拟化的平台上了。在实施虚拟化的过程中就会涉及到将原来老旧的服务器来迁移到虚拟化平台的运行,这就是P2V,物理机转换为虚拟机。谈到P2V大家会想到很多的工具,例如Vmwa…

生成n套数位加减乘除_leetcode 算法汇总(四)位运算

一、 运算符& 与运算: 两个位都是 1 时,结果才为 1,否则为 0| 或运算: 两个位都是 0 时,结果才为 0,否则为 1^ 异或运算: 两个位相同则为 0,不同则为 1~ 取反运算:0 …

机器学习算法之 K-means、层次聚类,谱聚类

k-means 和层次聚类都属于划分聚类,实际中最常用的是k-means,k-means效果不好的情况下才会采用其他聚类 K-means算法 K-means算法,也称为K-平均或者K-均值,是一种使用广泛的最基础的聚类算法 假设输入样本为TX1,X2,…,Xm;则算法…

mapper注解的主要作用_Mybatis中mapper的xml解析详解

上一篇文章分析了mapper注解关键类MapperAnnotationBuilder,今天来看mapper的项目了解析关键类XMLMapperBuilder。基础介绍回顾下之前是在分析configuration的初始化过程,已经进行到了最后一步mapperElement(root.evalNode("mappers"))&#x…

机器学习之梯度下降法(GD)和坐标轴下降法(CD)

梯度下降法 梯度下降法(Gradient Descent, GD)常用于求解无约束情况下凸函数(Convex Function)的极小值,是一种迭代类型的算法,因为凸函数只有一个极值点,故求解出来的极小值点就是函数的最小值…

阿里云Https部署网站

0、开始之前 文章图片很多,注意流量 首先你得准备好一个已经备案成功的域名,并且有一个在阿里云的服务器部署了的网站。 然后就是你迫切的希望升级网站为HTTPS部署。 那么我们开始吧! 1、申请CA证书 1.1登录阿里云控制台,选择菜单…

rabbitmq direct 多个消费者_一文解析 RabbitMQ 最常用的三大模式

Direct 模式所有发送到 Direct Exchange 的消息被转发到 RouteKey 中指定的 Queue。Direct 模式可以使用 RabbitMQ 自带的 Exchange: default Exchange,所以不需要将 Exchange 进行任何绑定(binding)操作。消息传递时,RouteKey 必须完全匹配才会被队列接…

C# 读取保存App.config配置文件的完整源码参考

最近出差在北京做一个小项目,项目里需要读取配置文件的小功能,觉得挺有参考意义的就把代码发上来给大家参考一下。我们选择了直接用微软的读取配置文件的方法。 这个是程序的运行设计效果,就是把这些参数可以进行灵活设置,灵活保存…

TensorFlow 简介

TensorFlow介绍 Tagline:An open-source software library for Machine Intelligence.Definition:TensorFlow TM is an open source software library fornumerical computation using data flow graphs.GitHub:https://github.com/tensorfl…

webbrowser设置为相应的IE版本

注册表路径: HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION 或者HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION 究竟选择哪一个…

jmeter压力测试_用Jmeter实现对接口的压力测试

一、多个真实用户对接口的压力测试1. 获取多个真实用户的token的两种方法:1)第一种:让开发帮忙生成多个token(多个用户账户生成的token),导出为csv格式的文件(以下步骤均以该方法为基础)2)第二种:自己设置多个用户账户和密码&…

程序员成长之路(转)

什么时候才能成为一个专业程序员呢?三年还是五年工作经验?其实不用的,你马上就可以了,我没有骗你,因为专业程序员与业余程序员的区别主要在于一种态度,如果缺乏这种态度,拥有十年工作经验也还是…

嵌入式开发——PWM高级定时器

学习目标 加强掌握PWM开发流程理解定时器与通道的关系掌握多通道配置策略掌握互补PWM配置策略掌握定时器查询方式掌握代码抽取优化策略掌握PWM调试方式学习内容 需求 点亮8个灯,采用pwm的方式。 定时器 通道 <

TensorFlow 基本操作

Tensorflow基本概念 图(Graph):图描述了计算的过程&#xff0c;TensorFlow使用图来表示计算任务。张量(Tensor):TensorFlow使用tensor表示数据。每个Tensor是一个类型化的多维数组。操作(op):图中的节点被称为op(opearation的缩写)&#xff0c;一个op获得/输入0个或多个Tensor…

TensorFlow 分布式

一、简介 使用单台机器或者单个GPU/CPU来进行模型训练&#xff0c;训练速度会受资源的影响&#xff0c;因为毕竟单个的设备的计算能力和存储能力具有一定的上限的&#xff0c;针对这个问题&#xff0c;TensorFlow支持分布式模型运算&#xff0c;支持多机器、多GPU、多CPU各种模…