成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用singledispatch在Python中追溯地添加方法

開發 后端
在本系列中,我們將介紹七個可以幫助你解決常見 Python 問題的 PyPI 庫。今天,我們將研究 singledispatch,這是一個能讓你追溯地向 Python 庫添加方法的庫。

[[266244]]

在我們覆蓋 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 函數可以幫助我們。

  1. @singledispatch
  2. def get_area(shape):
  3. raise NotImplementedError("cannot calculate area for unknown shape",
  4. shape)

get_area 函數的“基類”實現會報錯。這保證了如果我們出現一個新的形狀時,我們會明確地報錯而不是返回一個無意義的結果。

  1. @get_area.register(Square)
  2. def _get_area_square(shape):
  3. return shape.side ** 2
  4. @get_area.register(Circle)
  5. def _get_area_circle(shape):
  6. return math.pi * (shape.radius ** 2)

這種方式的好處是如果某人寫了一個匹配我們代碼的形狀,它們可以自己實現 get_area

  1. from area_calculator import get_area
  2.  
  3. @attr.s(auto_attribs=True, frozen=True)
  4. class Ellipse:
  5. horizontal_axis: float
  6. vertical_axis: float
  7.  
  8. @get_area.register(Ellipse)
  9. def _get_area_ellipse(shape):
  10. return math.pi * shape.horizontal_axis * shape.vertical_axis

調用 get_area 很直接。

  1. print(get_area(shape))

這意味著我們可以將大量的 if isintance()/elif isinstance() 的代碼以這種方式修改,而無需修改接口。下一次你要修改 if isinstance,你試試 `singledispatch!

在本系列的下一篇文章中,我們將介紹 tox,一個用于自動化 Python 代碼測試的工具。 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2017-04-12 11:16:08

Python終端編程

2010-03-10 11:11:16

Python編程

2015-09-15 13:12:35

腳本UbuntuLinux內核

2021-04-12 16:18:24

CPUFetchLinuxCPU

2010-03-10 19:18:10

Python scri

2010-03-15 15:30:35

Python模塊

2013-12-19 15:01:03

LinuxLinux進程

2013-11-06 15:35:49

LinuxLinux進程

2011-06-14 17:51:47

QListview Qt MVC

2022-11-03 11:19:22

2014-12-03 10:27:06

BYODBYOD安全移動設備

2021-07-02 06:34:53

Go語言sysmon

2023-10-08 15:41:35

2020-09-25 11:30:20

Java判空代碼

2022-03-01 21:25:30

對象代碼Proxy

2020-04-10 10:22:12

Java判空編程語言

2010-07-27 12:28:56

Flex Remote

2018-10-11 09:40:53

前端JavaScript編程語言

2013-12-30 10:43:15

云計算移動數據云安全

2012-03-07 11:17:19

AndroidPhoneGap插件
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久精品99久久 | 日本欧美国产 | 亚洲成人av在线 | 亚洲免费三区 | 日韩一级精品视频在线观看 | 日韩视频―中文字幕 | 在线观看免费毛片 | 一区二区三区国产 | 欧美日韩在线一区二区 | 国产成人一区二区三区久久久 | 久久区二区 | 欧美一级二级在线观看 | 久久综合国产 | 国产一级片91 | 国产羞羞视频在线观看 | 日本涩涩网| 国产精产国品一二三产区视频 | 日韩中文字幕一区二区三区 | 美女黄网站视频免费 | 精品一区二区三区视频在线观看 | 亚洲乱码国产乱码精品精98午夜 | 免费成人高清在线视频 | 日韩一级精品视频在线观看 | 天天成人综合网 | 91精品国产综合久久久亚洲 | 午夜tv免费观看 | 亚洲看片网站 | 乱一性一乱一交一视频a∨ 色爱av | 成人在线视频观看 | 欧美亚洲综合久久 | 91国内精品久久 | 91伊人| 国产欧美视频一区二区三区 | 欧美中国少妇xxx性高请视频 | 黑人精品欧美一区二区蜜桃 | 在线区| 久久久91精品国产一区二区三区 | 国产欧美视频一区 | 久久神马 | 91精品一区| 国产精品揄拍一区二区 |