您现在的位置是:亿华云 > IT科技
使用singledispatch在Python中追溯地添加方法
亿华云2025-10-09 13:07:32【IT科技】5人已围观
简介在我们覆盖 7 个 PyPI 库的系列文章中了解更多解决 Python 问题的信息。Python 是当今使用最多流行的编程语言之一,因为:它是开源的,它具有广泛的用途例如 Web 编程、业务应用、游戏
在我们覆盖 7 个 PyPI 库的使用溯地系列文章中了解更多解决 Python 问题的信息。
Python 是中追当今使用最多流行的编程语言之一,因为:它是添加开源的,它具有广泛的使用溯地用途(例如 Web 编程、业务应用、中追游戏、添加科学编程等等),使用溯地它有一个充满活力和专注的中追社区支持它。这个社区是添加我们在 Python Package Index(PyPI)中提供如此庞大、多样化的使用溯地软件包的原因,用以扩展和改进 Python。中追并解决不可避免的添加问题。
在本系列中,使用溯地我们将介绍七个可以帮助你解决常见 Python 问题的中追 PyPI 库。今天,源码下载添加我们将研究 singledispatch,这是一个能让你追溯地向 Python 库添加方法的库。
singledispatch
想象一下,你有一个有 Circle、Square 等类的“形状”库。
Circle 类有半径、Square 有边、Rectangle 有高和宽。我们的库已经存在,我们不想改变它。
然而,我们想给库添加一个面积计算。如果我们不会和其他人共享这个库,我们只需添加 area 方法,这样我们就能调用 shape.area() 而无需关心是什么形状。
虽然可以进入类并添加一个方法,但这是一个坏主意:没有人希望他们的类会被添加新的方法,程序会因奇怪的方式出错。云服务器提供商
相反,functools 中的 singledispatch 函数可以帮助我们。
@singledispatchdef get_area(shape): raise NotImplementedError("cannot calculate area for unknown shape", shape)get_area 函数的“基类”实现会报错。这保证了如果我们出现一个新的形状时,我们会明确地报错而不是返回一个无意义的结果。
@get_area.register(Square)def _get_area_square(shape): return shape.side ** 2@get_area.register(Circle)def _get_area_circle(shape): return math.pi * (shape.radius ** 2)这种方式的好处是如果某人写了一个匹配我们代码的新形状,它们可以自己实现 get_area。
from area_calculator import get_area@attr.s(auto_attribs=True, frozen=True)class Ellipse: horizontal_axis: float vertical_axis: float@get_area.register(Ellipse)def _get_area_ellipse(shape): return math.pi * shape.horizontal_axis * shape.vertical_axis调用 get_area 很直接。
print(get_area(shape))这意味着我们可以将大量的 if isintance()/elif isinstance() 的代码以这种方式修改,而无需修改接口。下一次你要修改 if isinstance,你试试 `singledispatch!
在本系列的下一篇文章中,我们将介绍 tox,一个用于自动化 Python 代码测试的工具。云服务器
很赞哦!(82)
热门文章
站长推荐
3、不明先知,根据相关征兆预测可能发生的事件,以便提前做好准备,赶紧注册相关域名。;不差钱域名;buchaqian抢先注册,就是这种敏感类型。预言是最敏感的状态。其次,你应该有眼力。所谓眼力,就是善于从社会上时不时出现的各种热点事件中获取与事件相关的域名资源。眼力的前提是对域名领域的熟悉和丰富的知识。
HarmonyOS自定义控件之触摸事件与事件分发
使用 AirFlow 调度 MaxCompute
深入解析ACE UI框架,带你看懂UI渲染流程
3.dns修改成功后,点击“域名解析”,按提示进行操作。解析格式一般如下:
为什么ThreadLocal容易导致内存泄漏?
聊一聊我在组内的Nacos
基于PA的跨设备迁移功能及PageAbility代码示例工程完全解