日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
使用singledispatch在Python中追溯地添加方法

在我們覆蓋 7 個 PyPI 庫的系列文章中了解更多解決 Python 問題的信息。

Python 是當今使用最多流行的編程語言之一,因為:它是開源的,它具有廣泛的用途(例如 Web 編程、業(yè)務應用、游戲、科學編程等等),它有一個充滿活力和專注的社區(qū)支持它。這個社區(qū)是我們在 Python Package Index(PyPI)中提供如此龐大、多樣化的軟件包的原因,用以擴展和改進 Python。并解決不可避免的問題。

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

singledispatch

想象一下,你有一個有 Circle、Square 等類的“形狀”庫。

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

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

雖然可以進入類并添加一個方法,但這是一個壞主意:沒有人希望他們的類會被添加新的方法,程序會因奇怪的方式出錯。

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

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

get_area 函數(shù)的“基類”實現(xiàn)會報錯。這保證了如果我們出現(xiàn)一個新的形狀時,我們會明確地報錯而不是返回一個無意義的結(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)

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

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

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

 
 
 
  1. print(get_area(shape))

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

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


分享文章:使用singledispatch在Python中追溯地添加方法
標題路徑:http://www.dlmjj.cn/article/coogcip.html