91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中面向接口編程實例分析

發布時間:2022-05-20 16:50:01 來源:億速云 閱讀:194 作者:iii 欄目:開發技術

這篇文章主要講解了“Python中面向接口編程實例分析”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Python中面向接口編程實例分析”吧!

前言

接口在軟件工程扮演重要角色,隨著應用程序的功能不斷擴展,代碼庫的更新和改變也難以管理。在許多情況下,會發現有一些看起來非常相似,但卻不相關的類,這可能會導致一些難于維護。在本次分享中,將看到你如何使用 Python 接口來幫助確定。

主要從下面幾個方面了解內容:

  • 了解接口的工作原理和創建 Python 接口的注意事項

  • 理解接口在像 Python 這樣的動態語言中重要性

  • 實現一個非正式的 Python 接口

  • 使用 abc.ABCMeta 和 @abc.abstractmethod 來實現一個正式的 Python 接口

Python 中的接口與大多數其它語言的處理方式不同,它們的設計復雜性也不同。在本教程結束時,你將對 Python 的數據模型的某些方面有更好的理解,以及 Python 中的接口與 Java、C++ 和 Go 等語言中的接口的比較。

概述 Python 接口

在高層次上,接口充當了設計類的藍圖,在接口中,定義了方法與在類中定義并沒有什么不同。不過不同于類,這些方法都是抽象方法。一個抽象的方法是定義接口的簡單的方式。在這里定義了方法,并不急于實現這些方法。這是由具體的類來完成的,然后由類來實現接口,為接口的抽象方法賦予具體的意義。

與 Java、Go 和 C++ 這些語言相比,Python 的接口設計方法有些不同。這些語言都提供了一個interface 關鍵字來定義接口,而在 Python 中,卻沒有提供這個關鍵字。Python 在另一個方面與其他語言有明顯的區別。python 并不要求實現接口的類來定義接口的所有抽象方法

非正式接口

在某些情況下,可能不需要正式的 Python 接口來嚴格規范。Python 的動態特性允許實現一個非正式的接口。非正式的 Python 接口是一個定義了可以被重載的方法。

在下面的例子中,你將從一個數據工程師的角度出發,他需要從各種不同的非結構化文件類型中提取文本,比如 PDF 和電子郵件。將創建一個非正式的接口,定義 PdfParserEmlParser具體類中的方法。

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中面向接口編程實例分析這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

饶河县| 鲁山县| 威宁| 丘北县| 建昌县| 丰城市| 常山县| 沙河市| 祁东县| 镶黄旗| 丹江口市| 金山区| 札达县| 常山县| 怀集县| 敖汉旗| 昆山市| 大足县| 梁河县| 阿合奇县| 茌平县| 资源县| 亚东县| 灵寿县| 沿河| 新疆| 军事| 万全县| 突泉县| 都兰县| 海口市| 南澳县| 泰兴市| 屯留县| 威远县| 连江县| SHOW| 稻城县| 休宁县| 尉犁县| 青阳县|