偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

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

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

[[266244]]

在我們覆蓋 7 個(gè) PyPI 庫(kù)的系列文章中了解更多解決 Python 問(wèn)題的信息。

Python 是當(dāng)今使用最多流行的編程語(yǔ)言之一,因?yàn)椋核情_源的,它具有廣泛的用途(例如 Web 編程、業(yè)務(wù)應(yīng)用、游戲、科學(xué)編程等等),它有一個(gè)充滿活力和專注的社區(qū)支持它。這個(gè)社區(qū)是我們?cè)?Python Package Index(PyPI)中提供如此龐大、多樣化的軟件包的原因,用以擴(kuò)展和改進(jìn) Python。并解決不可避免的問(wèn)題。

在本系列中,我們將介紹七個(gè)可以幫助你解決常見(jiàn) Python 問(wèn)題的 PyPI 庫(kù)。今天,我們將研究 singledispatch,這是一個(gè)能讓你追溯地向 Python 庫(kù)添加方法的庫(kù)。

singledispatch

想象一下,你有一個(gè)有 Circle、Square 等類的“形狀”庫(kù)。

Circle 類有半徑、Square 有邊、Rectangle 有高和寬。我們的庫(kù)已經(jīng)存在,我們不想改變它。

然而,我們想給庫(kù)添加一個(gè)面積計(jì)算。如果我們不會(huì)和其他人共享這個(gè)庫(kù),我們只需添加 area 方法,這樣我們就能調(diào)用 shape.area() 而無(wú)需關(guān)心是什么形狀。

雖然可以進(jìn)入類并添加一個(gè)方法,但這是一個(gè)壞主意:沒(méi)有人希望他們的類會(huì)被添加新的方法,程序會(huì)因奇怪的方式出錯(cuò)。

相反,functools 中的 singledispatch 函數(shù)可以幫助我們。

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

get_area 函數(shù)的“基類”實(shí)現(xiàn)會(huì)報(bào)錯(cuò)。這保證了如果我們出現(xiàn)一個(gè)新的形狀時(shí),我們會(huì)明確地報(bào)錯(cuò)而不是返回一個(gè)無(wú)意義的結(jié)果。

  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)

這種方式的好處是如果某人寫了一個(gè)匹配我們代碼的形狀,它們可以自己實(shí)現(xiàn) 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

調(diào)用 get_area 很直接。

  1. print(get_area(shape))

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

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

責(zé)任編輯:龐桂玉 來(lái)源: Linux中國(guó)
相關(guān)推薦

2017-04-12 11:16:08

Python終端編程

2010-03-10 11:11:16

Python編程

2015-09-15 13:12:35

腳本UbuntuLinux內(nèi)核

2021-04-12 16:18:24

CPUFetchLinuxCPU

2010-03-10 19:18:10

Python scri

2010-03-15 15:30:35

Python模塊

2011-06-14 17:51:47

QListview Qt MVC

2014-12-03 10:27:06

BYODBYOD安全移動(dòng)設(shè)備

2022-11-03 11:19:22

2013-12-19 15:01:03

LinuxLinux進(jìn)程

2013-11-06 15:35:49

LinuxLinux進(jìn)程

2020-09-25 11:30:20

Java判空代碼

2023-10-08 15:41:35

2020-04-10 10:22:12

Java判空編程語(yǔ)言

2021-07-02 06:34:53

Go語(yǔ)言sysmon

2022-03-01 21:25:30

對(duì)象代碼Proxy

2010-07-27 12:28:56

Flex Remote

2018-10-11 09:40:53

前端JavaScript編程語(yǔ)言

2013-12-30 10:43:15

云計(jì)算移動(dòng)數(shù)據(jù)云安全

2009-06-29 17:57:30

ApplicationJSP
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)