<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
介面在軟體工程扮演重要角色,隨著應用程式的功能不斷擴充套件,程式碼庫的更新和改變也難以管理。在許多情況下,會發現有一些看起來非常相似,但卻不相關的類,這可能會導致一些難於維護。在本次分享中,將看到你如何使用 Python 介面來幫助確定。
主要從下面幾個方面瞭解內容:
abc.ABCMeta
和 @abc.abstractmethod
來實現一個正式的 Python 介面Python 中的介面與大多數其它語言的處理方式不同,它們的設計複雜性也不同。在本教學結束時,你將對 Python 的資料模型的某些方面有更好的理解,以及 Python 中的介面與 Java、C++ 和 Go 等語言中的介面的比較。
在高層次上,介面充當了設計類的藍圖,在介面中,定義了方法與在類中定義並沒有什麼不同。不過不同於類,這些方法都是抽象方法。一個抽象的方法是定義介面的簡單的方式。在這裡定義了方法,並不急於實現這些方法。這是由具體的類來完成的,然後由類來實現介面,為介面的抽象方法賦予具體的意義。
與 Java、Go 和 C++ 這些語言相比,Python 的介面設計方法有些不同。這些語言都提供了一個interface
關鍵字來定義介面,而在 Python 中,卻沒有提供這個關鍵字。Python 在另一個方面與其他語言有明顯的區別。python 並不要求實現介面的類來定義介面的所有抽象方法
在某些情況下,可能不需要正式的 Python 介面來嚴格規範。Python 的動態特性允許實現一個非正式的介面。非正式的 Python 介面是一個定義了可以被過載的方法。
在下面的例子中,你將從一個資料工程師的角度出發,他需要從各種不同的非結構化檔案型別中提取文字,比如 PDF 和電子郵件。將建立一個非正式的介面,定義 PdfParser
和EmlParser
具體類中的方法。
class InformalParserInterface: def load_data_source(self, path: str, file_name: str) -> str: """Load in the file for extracting text.""" pass def extract_text(self, full_file_name: str) -> dict: """Extract text from the currently loaded file.""" pass
在 InformalParserInterface
類中定義了兩個方法,分別是 .load_data_source()
和 .extract_text()
。 雖然定義了方法卻沒有實現。接下來我們建立繼承 InformalParserInterface
的類將需要實現這兩個方法。我們關心介面定義了提取文字一般流程,也可以看做規範,也就是我們首先會載入資料來源,然後在資料來源上提取文字。
InformalParserInterface
看起來就是一個標準 python 的 class。不過因為形似介面所以可以將這個類看做一個介面。
你定義了兩個實現InformalParserInterface
的類。為了使用介面,首先建立一個具體類來繼承於。介面,也就是這個類是介面類的子類,提供了介面抽象方法的具體實現。將建立兩個具體類來實現你的介面。第一個是PdfParser
,將用來解析 PDF 檔案的文字。
class PdfParser(InformalParserInterface): """Extract text from a PDF""" def load_data_source(self, path: str, file_name: str) -> str: """Overrides InformalParserInterface.load_data_source()""" pass def extract_text(self, full_file_path: str) -> dict: """Overrides InformalParserInterface.extract_text()""" pass
InformalParserInterface
的具體實現現在允許你從PDF檔案中提取文字。第二個具體的類是EmlParser
,將用來解析電子郵件中的文字。
class EmlParser(InformalParserInterface): """Extract text from an email""" def load_data_source(self, path: str, file_name: str) -> str: """Overrides InformalParserInterface.load_data_source()""" pass def extract_text_from_email(self, full_file_path: str) -> dict: """A method defined only in EmlParser. Does not override InformalParserInterface.extract_text() """ pass
InformalParserInterface
的具體實現現在允許你從電子郵件檔案中提取文字。
到目前為止,定義了 InformalPythonInterface
的兩個具體實現。然而,請注意,EmlParser
未能正確定義.extract_text()
。要檢查EmlParser
是否實現了InformalParserInterface
抽象方法,也就是介面方法,可以參照如下程式碼。
>>> # Check if both PdfParser and EmlParser implement InformalParserInterface >>> issubclass(PdfParser, InformalParserInterface) True >>> issubclass(EmlParser, InformalParserInterface) True
到此這篇關於Python 中面向介面程式設計詳情的文章就介紹到這了,更多相關Python 介面程式設計內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45