typing.py的源码在:https://github.com/python/cpython/blob/main/Lib/typing.py 。此模块为类型提示(Type Hints)提供运行时支持。这里介绍下@typing.overload的使用,从python 3.5版本开始将Typing作为标准库引入。

python3中增加了Function Annotation(函数注解,能够声明类型)的功能,可以使用类型检查工具如mypy达到类型静态检查的效果。

@overload装饰器可以修饰支持多种不同参数类型组合的函数和方法。一系列@overload-decorated定义必须紧跟一个非@overload-decorated定义(对于相同的函数/方法)。

@overload-decorated定义仅是为了协助类型检查工具,因为它们将被非@overload-decorated定义覆盖,而后者在运行时会被类型检查工具忽略。在运行时,直接调用@overload-decorated函数会引发NotImplementedError。

被装饰的函数的输入类型和输出类型都可以更改,非@overload-decorated定义必须通用。

以下为测试代码:

from typing import overload, Union
from typing_extensions import Literalvar = 2
if var == 1:# python3中增加了Function Annotation(函数注解,能够声明类型)的功能,可以使用类型检查工具如mypy达到类型静态检查的效果def foo(name: str) -> str:return "csdn id:" + nameprint(foo("fengbingchun"))#print(foo(5)) # TypeError: can only concatenate str (not "int") to str
elif var == 2:# reference: https://stackoverflow.com/questions/59359943/python-how-to-write-typing-overload-decorator-for-bool-arguments-by-value# 被装饰的函数的输入类型和输出类型都可以更改,非@overload-decorated定义必须通用# The first two overloads use Literal[...] so we can have precise return types:@overloaddef myfunc(arg: Literal[True]) -> str: ...@overloaddef myfunc(arg: Literal[False]) -> int: ...# The last overload is a fallback in case the caller provides a regular bool@overloaddef myfunc(arg: bool) -> Union[str, int]: # Union[str, int] == str | int...def myfunc(arg:bool) -> Union[int, str]:if arg: return "something"else: return 0print(myfunc(True))print(myfunc(False))# Variables declared without annotations will continue to have an inferred type of 'bool'variable = Trueprint(myfunc(variable))print("test finish")

GitHub:https://github.com/fengbingchun/Python_Test

Python3中装饰器@typing.overload的使用相关推荐

  1. Python3中装饰器介绍

          Python中的装饰器(decorator)是一个接受另一个函数作为参数的函数.装饰器通常会修改或增强它接受的函数并返回修改后的函数.这意味着当你调用一个装饰函数时,你会得到一个与基本定义 ...

  2. python中装饰器修复技术_python3之装饰器修复技术@wraps

    普通函数 def f(): """ 这是一个用来测试装饰器修复技术的函数 """ print("哈哈哈") if __n ...

  3. python中的json函数_python中装饰器、内置函数、json的详解

    装饰器 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象. 先看简单例子: def run(): time.sleep(1 ...

  4. 8.Python中装饰器是什么?

    Python中装饰器是什么? A Python decorator is a specific change that we make in Python syntax to alter functi ...

  5. python装饰器使用教学,Python教程|简单上手Python中装饰器的使用

    如何打造极简主义风格网站教程 .极简主义与其他设计风格<极简主义设计之美> 这篇文章的一部分是讲极简主义是如何与其他设计风格很好配合的.可以把极简主义当作一种属性,而它可以添加或结合其他. ...

  6. python中装饰器的作用_Python装饰器详解,详细介绍它的应用场景

    装饰器的应用场景附加功能 数据的清理或添加:函数参数类型验证 @require_ints 类似请求前拦截数据格式转换 将函数返回字典改为 JSON/YAML 类似响应后篡改为函数提供额外的数据 moc ...

  7. python3大器----装饰器,迭代器,生成器

    目录 一:闭包: 1:闭包的作用和定义: 2:闭包的形成条件: 3:闭包的经典案例: 4:闭包的原理: 5: 闭包中使用外部函数变量: 二:装饰器: 1:装饰器的定义和作用: 2:装饰器经典案例分析: ...

  8. selenium 中装饰器作用

    前面讲到unittest里面setUp可以在每次执行用例前执行,这样有效的减少了代码量,但是有个弊端,比如打开浏览器操作,每次执行用例时候都会重新打开,这样就会浪费很多时间.于是就想是不是可以只打开一 ...

  9. python装饰器作用-python中装饰器的作用

    装饰器的作用就是用一个新函数封装旧函数(是旧函数代码不变的情况下增加功能)然后会返回一个新函数,新函数就叫做装饰器,一般为了简化装饰器会用语法糖@新函数来简化 例子: 这是一段代码,但功能太少,要对这 ...

最新文章

  1. ASP.NET Page执行顺序如:OnPreInit()、OnInit()
  2. 下一代对话系统中的关键技术(下篇)
  3. 视觉感知_产品设计中的视觉感知
  4. css 字体加粗_HTML基础属性与CSS基础
  5. bzoj4152-[AMPPZ2014]The_Captain
  6. AI风向标:发改委重大工程项目公布,首个无人车路测试点落户亦庄
  7. whitepages 被调查_槐荫区美里湖办事处残联开展2020年残疾人精准服务需求调查工作...
  8. 【转】对JavaScript调用堆栈和setTimeout用法的深入研究
  9. 使用升级版的 Bootstrap typeahead v1.2.2
  10. 数字集成电路与系统设计基础知识
  11. 超分辨率重建——关于YIQ空间
  12. python激光扫描雷达_一文详解固态激光雷达的里程计(loam_livox)
  13. RabbitMQ-Plugin configuration unchanged.
  14. 麓言科技CAD制图技巧
  15. std::stable_sort 和 std::for_each 的用法[转]
  16. 连接工作站跑机器学习(Linux命令)
  17. 阿里云狂揽国际朋友圈,集体融入数字中国新时代
  18. Linux 版本 内核版本 发行版本
  19. 【BZOJ 1934】 [Shoi2007]Vote 善意的投票
  20. 在成为Android工程师的一年里,我经历了什么?

热门文章

  1. opencv函数copyto的用法
  2. 【camera-lidar】自动驾驶相机-激光雷达融合方案综述
  3. 基于颜色特征,形状特征和纹理特征的数字图像的检索(Digital Image Retrieval)MATLAB GUI实现(本科毕业设计)
  4. 【opencv】(13) 案例:停车场空余车位检测,附python完整代码
  5. Learn OpenGL (十):材质
  6. Vue、angular等框架实现双向绑定的原理,核心机制是使用了Object.defineProperty
  7. Class101–如何高效地构建强大的数字绘画
  8. Blender从头到尾创建低多边形角色学习教程 Low Poly Characters – Blender Bitesize Course
  9. Maya教程-XGEN制作毛发技能学习 Patreon – Cartoon Grooming Series by Jesus FC
  10. windows下 Source Monitor代码度量工具的使用