温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Python中singledispatch库的具体用法介绍

发布时间:2021-09-13 10:41:09 来源:亿速云 阅读:101 作者:chen 栏目:编程语言

本篇内容主要讲解“Python中singledispatch库的具体用法介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python中singledispatch库的具体用法介绍”吧!

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!

到此,相信大家对“Python中singledispatch库的具体用法介绍”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI