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

流畅的 Python 第二版(GPT 重译)(七)

__setitem__特殊方法的签名在Python 语言参考中的“3.3.6. 模拟容器类型”中定义。...但总体问题仍然存在:isinstance/issubclass检查只关注方法的存在或不存在,而不检查它们的签名,更不用说它们的类型注释了。...② 即使没有注释,Mypy 也能推断出这返回一个complex。根据您的 Mypy 配置,注释可以避免警告。 ③ 这里SupportsComplex确保datum是可转换的。...⑧ 这行代码会在 Mypy 输出中生成一个注释。 正如我们在示例 8-22 中看到的,reveal_type是 Mypy 识别的“魔术”函数。...合作方法必须具有兼容的签名,因为你永远不知道A.ping是在B.ping之前还是之后调用的。激活顺序取决于每个同时继承两者的子类声明中A和B的顺序。

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

使用 Mypy 检查 30 万行 Python 代码,总结出 3 大痛点与 6 个技巧!

简而言之,这意味着每个函数签名都是带注解的,并且不允许有隐式的 Any 转换。...一年后,我们完成了全部代码的类型化(#2622),并升级到最严格的 Mypy 设置(最关键的是 disallow_untyped_defs ,它要求对所有函数签名进行注解),从那时起,我们一直维护着这些设置...例如,functools.lru_cache 尽管在 typeshed 里有类型注解,但由于复杂的原因,它不保留底层函数的签名,所以任何用 @functools.lru_cache 装饰的函数都会被移除所有类型注解...Mypy 的 文档 对保留签名的装饰器和装饰器工厂有一个规范的建议。...return cast(F, wrapper)@decoratordef f(a: int) -> str: return str(a)但是,我发现使用装饰器做任何花哨的事情(特别是不保留签名的情况

89420

流畅的 Python 第二版(GPT 重译)(四)

Mypy 给我至少一个与我在 2020 年 4 月写这一章时不同的报告。当你阅读这篇文章时,你可能会得到与这里显示的不同的结果。 如果函数签名没有注释,Mypy 默认会忽略它—除非另有配置。...这是一个完全注释的签名,满足了 Mypy: def show_count(count: int, word: str) -> str: 提示 与其像--disallow-incomplete-defs这样输入命令行选项...我们可以使用TypeVar来改进该签名。...此外,“重载签名”(第十五章)解释了如何使用@typing.overload声明重载函数签名,并包括了一个使用typing.Protocol和有界TypeVar的广泛示例。...内置的input在 typeshed 上有这个签名: def input(__prompt: Any = ...) -> str: ... input的签名与这个Callable类型提示一致: Callable

32610

可维护的Python代码库的7条规则

Mypy[3]这样的静态类型检查工具旨在将类型提示作为定义正确代码的规则来执行。Mypy查看所有源代码文件,检查类型规则是否满足要求。例如,传递给函数的所有参数类型是否与函数签名兼容?...后一类情况通常是反模式,所以mypy通常会指导你重构代码,使其更简单、更好地实现。...Mypy并没有抱怨这些方法签名,但它使得应该提供给foo的参数数量变得模糊不清。更好的方法是重新考虑foo方法,并考虑是否有可能将参数分组为某种类型的集合对象。 这种重构看起来很可笑。...它意味着函数签名几乎可以给我们提供函数的所有相关信息。 类中定义的方法很容易被滥用来产生副作用。它们执行一些计算,返回一些东西,但同时,它们修改了类中的一些东西。...这意味着我们最终可能会得到一个带有很长输入参数列表的大函数签名。将参数分组到某个集合类中可以避免这种情况,但这样就必须编写逻辑来实例化参数对象。尽管如此,长长的输入参数列表仍然难以推理。

26030

流畅的 Python 第二版(GPT 重译)(八)

类型检查器尝试将给定的参数与每个重载签名进行匹配,按顺序。调用sum(range(100), 1000)不匹配第一个重载,因为该签名只有一个参数。但它匹配第二个。...你也可以在普通的 Python 模块中使用@overload,只需在函数的实际签名和实现之前写上重载的签名即可。示例 15-1 展示了如何在 Python 模块中注释和实现sum。 示例 15-1。...如果你使用--disallow-any-expr运行 Mypy,它会抱怨from_json函数体中的两行代码: …/typeddict/ $ mypy books_any.py --disallow-any-expr...⑤ 记住签名:def to_xml(book: BookDict) -> str: ⑥ XML 输出会是什么样子? 现在我们用 Mypy 检查demo_not_book.py(示例 15-12)。...a, b in pairs) TypeError: unsupported operand type(s) for +: 'float' and 'str' 我尝试添加Vector和一个str,但消息抱怨

16510

python的抽象基类

test1' object does not support item assignment 我们可以发现shuffle函数需要调换集合中元素的位置,而test1实现的是不可变序列,可变序列还需要实现__setitem...我们可以在test1已经实例化后,再设置__setitem__,在运行时修改类和模块,而不改动源码,这就是所谓的“猴子补丁”。...“鸭子类型”:忽略对象的真正类型,转而关注对象有没有实现所需的方法,签名和语义。 继承抽象基类很简单,只要实现python里的特殊方法__len__之类的,这样python就会自动识别。...,__len__ __contains__,__iter__,__reversed__,index,and count MutableSequence Sequence __getitem__,__setitem..._,__len__ __contains__,keys,items,values,get,__eq__,and __ne__ MutableMapping Mapping __getitem__,__setitem

88210

Python 进阶指南(编程轻松进阶):十一、注释、文档字符串和类型提示

Python 是一种动态类型的语言,有静态分析工具,比如为它编写的 Mypy。) 安装和运行 Mypy 虽然 Python 没有官方的类型检查工具,但 Mypy 是目前最流行的第三方类型检查工具。...您可以通过运行以下命令用pip安装 Mypy: `python –m pip install –user mypy` 在 MacOS 和 Linux 上运行python3而不是python。...图 11-1:崇高文本文本编辑器显示来自 Mypy 的错误 根据您使用的 IDE 或文本编辑器,配置 IDE 或文本编辑器以使用 Mypy 的步骤会有所不同。...如果所有这些都失败了,您总是可以从命令提示符或终端窗口运行 Mypy。 让 Mypy 忽略代码 出于某种原因,您可能会编写不希望收到类型提示警告的代码。...下面的代码不会引起类型检查器的任何抱怨: spam: list = [42, 'hello', 3.14, True] 要明确声明列表中值的数据类型,必须使用typing模块的List类型提示。

91530
领券