首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python:多态、协议和鸭子类型

然而,Python 语言没有 interface 关键字,就是说,Python 里没有像 java、C# 一样的接口。...对于多态,Python 有更好的实现方式——鸭子类型(duck typing)。 协议和鸭子类型 所谓 鸭子类型 就是:如果一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么它就是鸭子。...初次看到这个描述的小伙伴一定一头雾水,为了理解鸭子类型,我们不得不提到另一个名词——协议。...Python 中的协议举例 Python 中有很多的协议,比如迭代器协议,任何实现了 __iter__ 和 __next__ 方法的对象都可称之为迭代器,但对象本身是什么类型不受限制,这得益于鸭子类型。...Python 不是不支持多态,而是 Python 本身就是一门多态的语言。

98820

Python 静态类型检查入门

有了解决方案,问题就解决了一半,剩下的就是要落实;就其它静态类型的语言来说这个比较好办,只需要把数据类型声明为 int / long int 类型就行,编译时就能检查出问题。...对于 Python 的话我们要加一些类型提示(注解),然后再用专门的静态分析工具去检查,我们的使用方式与类型提示是否一致。那下面就来实操下。...第一步安装类型检查工具 为了做静默类型检查,我们需要先安装一个官方提供的工具 mypy ;从 github 上看这个已经是官方第二大的项目了,这个工具的工程质量上确实不错。...第三步修复类型检查的问题 按 1/10000 的精度把我们的代码逻辑改正确。 #!...,可以看到类型检查也过去了。

6810
您找到你想要的搜索结果了吗?
是的
没有找到

python静态类型检查工具mypy

mypy介绍 mypy 是 Python 的一个可选静态类型检查器,旨在结合动态(或“鸭子”)类型和静态类型的优点。...mypy 将 Python 的表达能力和便利性与强大的类型系统和编译时类型检查相结合。mypy 类型检查标准 Python 程序;使用任何 Python VM 运行它们,基本上没有运行时开销。...mypy检查的结果是基于类型注解的,这意味你可以忽略mypy所提示的错误,只把它当做警告。 默认情况下,mypy不会对动态类型函数进行类型检查。...("123", "qwe") # 静态类型检查失败 使用mypy进行静态类型检查,结果如下所示: test.py:17: error: Argument 1 to "add" has incompatible...如果我们想要上面的代码通过静态类型检查,可以有两种方式。

81710

介绍几款 Python 类型检查工具

近日,微软在 Github 上开源了一个 Python 静态类型检查工具:pyright ,引起了社区内的多方关注。...如今开源的 Pyright ,口碑还不错,那我们就来看看它有啥本事,顺便再介绍其它几款类型检查工具。 众所周知,Python 是一门动态类型语言,在运行期才知道变量的实际类型。...而到了 3.5 版本,Python 继续引入了静态类型检查的语法(即 PEP-484,type hints)。...后来,又陆续提出了 PEP-526、PEP-544,类型检查的规范逐渐丰富。 类型检查的好处是及早检查,提前发现类型的错误,增强代码的一致性与可维护性。...相较于 mypy 及其它用 Python 写的检查工具,它的速度是 5 倍甚至更多。 不依赖 Python 环境。

1.1K10

介绍几款 Python 类型检查工具

微软在 Github 上开源了一个 Python 静态类型检查工具:pyright ,引起了社区内的多方关注。...如今开源的 Pyright ,口碑还不错,那我们就来看看它有啥本事,顺便再介绍其它几款类型检查工具。 众所周知,Python 是一门动态类型语言,在运行期才知道变量的实际类型。...而到了 3.5 版本,Python 继续引入了静态类型检查的语法(即 PEP-484,type hints)。...后来,又陆续提出了 PEP-526、PEP-544,类型检查的规范逐渐丰富。 类型检查的好处是及早检查,提前发现类型的错误,增强代码的一致性与可维护性。...相较于 mypy 及其它用 Python 写的检查工具,它的速度是 5 倍甚至更多。 不依赖 Python 环境。

73310

介绍几款 Python 类型检查工具

adorable-animal-basket-1543793.jpg 近日,微软在 Github 上开源了一个 Python 静态类型检查工具:pyright ,引起了社区内的多方关注。...如今开源的 Pyright ,口碑还不错,那我们就来看看它有啥本事,顺便再介绍其它几款类型检查工具。 众所周知,Python 是一门动态类型语言,在运行期才知道变量的实际类型。...而到了 3.5 版本,Python 继续引入了静态类型检查的语法(即 PEP-484,type hints)。...后来,又陆续提出了 PEP-526、PEP-544,类型检查的规范逐渐丰富。 类型检查的好处是及早检查,提前发现类型的错误,增强代码的一致性与可维护性。...相较于 mypy 及其它用 Python 写的检查工具,它的速度是 5 倍甚至更多。 不依赖 Python 环境。

83840

开源图书《Python完全自学教程》7.1.4不检查类型

7.1.4 不检查类型 读者是否发现,在前述所写过的函数中,对参数的类型——形参应该引用什么类型的实参——没有要求声明,也没有在函数中检查类型。...用下面的方式调用此函数: >>> add(3, 4) 7 >>> add('learn', 'python') 'learnpython' >>> add([1,2,3], [4,5,6]) [1, 2..., 3, 4, 5, 6] 分别让 add() 的形参 x, y 引用了不同类型Python 对象,只要它们能够执行 “ + ” 运算符,函数就能正常执行,且返回值的类型也各不相同。...这就是 Python 中函数的特点(这种特征在第8章8.6节会深入探讨): 在定义函数的时候,不强制要求形参类型和返回值类型; 在调用函数的时候,不强制检查实参类型。...Python 为了照顾有其他编程语言习惯的开发者,以及“追求明确的强迫症”开发者,允许在定义函数的时候,对参数和函数返回值的类型给予说明。

20810

Python中进行运行时类型检查

Python 是一门动态类型语言,没有编译器对变量类型正确性的检查与保证,这也意味着经常需要在运行时对变量的类型进行校验,尤其是在后端接口开发中,毕竟前端传入的数据往往是不可控的。...Python 3.5 引入了类型注解与 typing 模块,可以对 Python 代码进行静态类型检查,很大程度上提高了代码的可读性与可维护性,尤其是在较大的项目中。...除了静态类型检查Python类型注解也可以在应用在运行时,例如 FastAPI(Pydantic) 就是利用了类型注解来进行请求参数解析、数据校验和 OpenAPI 文档生成的。...实际上 Python 标准库提供了一个简单的运行时类型检查的能力。...typing.Protocol 自定义类型 Python 3.8 引入了 typing.Protocol 类与typing.runtime_checkable装饰器,可以用来定义类型,然后在运行时对对象进行类型检查

55010

资源 | Github项目推荐 | 微软开源Python静态类型检查器Pyright

微软最新开源Python静态类型检查器Pyright,比mypy快5倍 Python语言的静态类型检查器 创建Pyright是为了填补像 mypy 这样的现有Python类型检查器的漏洞。...Github项目地址:(点击链接可直接打开) https://github.com/Microsoft/pyright 速度 Pyright通常比mypy和其他用Python编写的类型检查器快5倍或更多...类型检查功能 Pyright 支持: PEP 484 类型提示,包括泛型 变量注释的 PEP 526 语法 PEP 544 结构子类型 函数返回值、实例变量、类变量和全局变量的类型推断 理解条件代码流构造的智能类型约束...它支持各种功能,包括调试、linter插件、类型检查插件等等。 Pyright完全专注于类型检查。 这是一个没有专门团队的次要项目。...它还提供类型检查功能。 Pyright提供了与之重复的功能,但包括了一些独特的功能,如可配置性更高、命令行执行和更好的性能。

80320

资源 | Github项目推荐 | 微软开源Python静态类型检查器Pyright

微软最新开源Python静态类型检查器Pyright,比mypy快5倍 Python语言的静态类型检查器 创建Pyright是为了填补像 mypy 这样的现有Python类型检查器的漏洞。...Github项目地址:(点击链接可直接打开) https://github.com/Microsoft/pyright 速度 Pyright通常比mypy和其他用Python编写的类型检查器快5倍或更多...类型检查功能 Pyright 支持: PEP 484 类型提示,包括泛型 变量注释的 PEP 526 语法 PEP 544 结构子类型 函数返回值、实例变量、类变量和全局变量的类型推断 理解条件代码流构造的智能类型约束...它支持各种功能,包括调试、linter插件、类型检查插件等等。 Pyright完全专注于类型检查。 这是一个没有专门团队的次要项目。...它还提供类型检查功能。 Pyright提供了与之重复的功能,但包括了一些独特的功能,如可配置性更高、命令行执行和更好的性能。

82620

检查图片是否损坏、图片后缀是否与实际图片类型对应 - Python

图片工具 检查图片是否损坏 日常工作中,时常会需要用到图片,有时候图片在下载、解压过程中会损坏,而如果一张一张点击来检查就太不Cool了,因此我想大家都需要一个检查脚本; 测试图片,0.jpg是正常的,...代码如下: # 从本地判断图片是否损坏 def is_valid_image(path): ''' 检查文件是否损坏 ''' try: bValid = True fileObj...在下载聊天中的图片时,经常会下载到gif但是实际为jpg或者png的情况,这就导致这些图片无法直接展示,且需要手动改回实际类型,因此有了下面这个脚本; 类型校验转换前: ?...+real_type) 通过该脚本,可以自动的对图片的后缀以及其实际类型进行校验,配合linux的cp、mv等命令很容易的实现图片类型修正的功能,还是挺有用的感觉; 小结 实际上这两个脚本的运行都是依赖于图片文件自身具备的格式...,对其固定格式进行检查,实现完整性、正确性的检验,大家也可以尝试这进行手动的修改类型,比如jpg改为png,手动损坏一个图片文件,比如直接txt打开后删掉一段即可来试试看哈;

2.9K41

Github项目推荐 | 微软最新开源Python静态类型检查器Pyright

微软最新开源Python静态类型检查器Pyright,比mypy快5倍 Python语言的静态类型检查器 创建Pyright是为了填补像 mypy 这样的现有Python类型检查器的漏洞。...Github项目地址:(点击链接可直接打开) https://github.com/Microsoft/pyright 速度 Pyright通常比mypy和其他用Python编写的类型检查器快5倍或更多...类型检查功能 Pyright 支持: PEP 484 类型提示,包括泛型 变量注释的 PEP 526 语法 PEP 544 结构子类型 函数返回值、实例变量、类变量和全局变量的类型推断 理解条件代码流构造的智能类型约束...它支持各种功能,包括调试、linter插件、类型检查插件等等。 Pyright完全专注于类型检查。 这是一个没有专门团队的次要项目。...它还提供类型检查功能。 Pyright提供了与之重复的功能,但包括了一些独特的功能,如可配置性更高、命令行执行和更好的性能。

98920

全栈Python 编程必备

数据类型 Python中的基本数据类型有布尔类型,整数,浮点数和字符串等。 Python 中的数据结构主要有元组(tuple),列表(list)和字典(dictionary)。...Python 没有私有变量的概念,而描述符可以作为一种 Python 的方式来实现与私有变量类似的功能。 静态方法、类方法、property都是构建描述符的类。...当需要某个描述符跨多个不同的类和属性的时候,例如类型验证,则使用该方法,例如: class MyNameDescriptor(object): def __init__(self):..._myname 2.使用属性类型可以更加简单、灵活地创建描述符。通过使用 property(),可以轻松地为任意属性创建可用的描述符。..._sname name = property(fget, fset, fdel, "This is the property.") 3.使用属性描述符,它结合了属性类型方法和 Python装饰器

1.6K51

【Kotlin】泛型 ③ ( 泛型 out 变 | 泛型 in 逆变 | 泛型 invariant 不变 | 泛型逆变变代码示例 | 使用 reified 关键字检查泛型参数类型 )

文章目录 一、泛型 out 变 二、泛型 in 逆变 三、泛型 invariant 不变 四、泛型逆变变代码示例 五、使用 reified 关键字检查泛型参数类型 本章总结 : 使用了 泛型 out...可以使 子类泛型对象 赋值给 父类泛型对象 ; 一、泛型 out 变 ---- 使用 out 关键字 , 可以使 子类泛型对象 赋值给 父类泛型对象 ; 在 泛型类 中 , 如果只将 泛型类型...Consumer = People() consumer.consume(Burger()) } 执行结果 : 生产食物 生产快餐 人吃食物 五、使用 reified 关键字检查泛型参数类型...---- 泛型参数类型 T 在 运行时 会被 类型擦除 , 因此 在运行时 是 不知道 泛型参数 的 具体类型 的 , 借助 reified 关键字 可以检查 运行时 泛型参数 的 具体类型 ;...在 Java 中 , 运行时 不知道 泛型参数 的 具体类型 ; 在 Kotlin 中可以 通过 reified 关键字检查 泛型参数类型 ; Java 中如果想要知道 泛型参数 具体类型 , 通过常规的方法无法实现

1.6K10
领券