| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> python: methoddispatch -> 正文阅读 |
|
[Python知识库]python: methoddispatch |
参考链接: Python methoddispatch包_程序模块 - PyPI - Python中文网 functools.singledispatchmethod(Python 3.8) - 知乎 摘要:本文章介绍了methoddispatch包的基本使用,以及如果在类外注册泛型函数,泛型函数的分派机制,通过属性调用查看指定类型会被分派的执行函数,查看泛型函数的所有注册函数,子类重写扩展父类的泛型函数,在单个实例上进行指定类型函数的重写等;简单提及python3.8中的functools.singledispatchmethod 1. methoddispatch包简介? ? ? ? python3.4向functools标准库中添加了singledispatch装饰器(主要针对函数),而methoddispatch 包则将此项功能添加到了实例方法中。 2. 什么是泛型函数?????????泛型函数是指由多个函数组成的函数,可以对不同类型实现相同的操作,调用时应该使用哪个实现由分派算法决定 3. methoddispatch包的使用
若要定义泛型方法的定义,使用@singledispatch修饰;分派发生在第一个参数的类型上,相应的创建函数。要向函数添加重载实现,使用泛型函数的register()属性;它是一个装饰器,获取一个类型参数并装饰一个实现该类型操作的函数。 register()属性仅在类语句中工作,依赖于SingleDispatch.__init_subclass__创建实际调度表。这也意味着无法注册具有相同名称的两个方法,因为只有最后一个将出现在类字典中。 未定义在类中的函数想注册到泛型函数可以使用 add_overload 属性
当泛型函数被调用时,会根据传入的第一个参数的类型进行分派
如果特定类型没有注册的实现,则使用其方法解析顺序来查找更通用的实现。用@singledispatch修饰的原始函数注册为基object类型,这意味着如果找不到更好的实现,就使用它。 在检查泛型函数将为给定类型选择哪个实现,请使用dispatch()属性
要访问所有注册的实现,请使用只读的registry属性
子类可以用它们自己的重写扩展基类上函数的类型注册表。SingleDispatch minix类确保每个子类都有自己独立的调度注册表副本
方法重写不需要再次提供 register 装饰器
但是,为register decorator提供相同的类型也可以。用不同类型装饰一个方法重写(不是一个好主意)将被注册成不同的类型,并为原始类型保留基类处理程序。 如果需要,可以在单个实例上指定方法重写
在Python3.6及更高版本中,对于用类型注释的函数,修饰符将自动推断第一个参数的类型
在Python3.5和更早版本中,SingleDispatch 类使用一个元类SingleDispatchMeta来管理调度注册表。但是在python3.6和更高版本中,使用了__init_subclass__方法。如果您的类也继承自ABC接口,那么您可以在python3.5及更高版本中使用SingleDispatchABCMeta元类。 最后,通过类访问方法func, 将使用该类的调度注册表
4. 在python3.8中,可以通过使用functools.singledispatchmethod
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/16 3:25:50- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |