理解 Python 中的抽象

| | | | | | | | | | | | | | | | | | |

在本教程中,我們將討論 Python 中面向對象編程方法的抽象概念。

本質上,抽象側重於向用戶隱藏流程或方法的內部實現。因此,用戶知道他在做什麼,但不知道工作是如何完成的。

抽象



 

什麼是 Python 中的抽象?

例如,人們並不認為汽車是由數千個單獨零件組成的集合。相反,他們將其視為具有自己獨特行為的明確定義的對象。這種抽象允許人們在不知道組成汽車的零件的複雜性的情況下駕駛汽車。他們可以忽略發動機傳動和製動系統的細節。相反,他們可以使用整個對象。

一種操作抽象和使用分層分類的強大方法。這使我們能夠將復雜系統的語義分層,將它們分解成更易於管理的部分。在外面,汽車是一個單一的物體。進入車內,您會看到汽車由幾個子系統組成:轉向、剎車、音響系統、安全帶等。反過來,這些子系統中的每一個都由更小的塊組成。

關鍵是我們開車使用分層抽象的汽車(或任何其他復雜系統)。

這也可以應用於使用 OOP 概念的計算機程序。這就是面向對象編程的精髓。

Python中的抽像類和方法

要聲明一個抽像類,我們首先需要導入abc 模塊.讓我們看一個例子。

 from abc import ABC class abs_class (ABC): #abstract methods 

這裡 abs_class &它是一個抽象可以在其中定義抽象方法或任何其他方法的類。




作為一個屬性,抽像類可以有任意數量的抽象方法,與任意數量的抽象方法共存的其他方法。比如我們可以看到如下。

 from abc import ABC, abstractmethod class abs_class (ABC): #normal method def method(self): #方法定義@abstractmethod def Abs_method(self): #Abs_method定義

這裡是method()&普通方法,而Abs_method()&一個抽象方法實現 abc 模塊中的 @abstractmethod

示例

現在我們了解了抽像類和方法,讓我們來看一個示例。

 from abc import ABC, abstractmethod class Absclass(ABC): def print(self, x): print("Passed value:", x) @abstractmethod def task (self): print ("We are inside Absclass task") class test_class (Absclass): def task (self): print ("We are inside test_class task") class example_class (Absclass): def task (self): print ("We are inside example_class task") #test_class 對象創建 test_obj = test_class () test_obj.task () test_obj.print (100) #example_class 對象創建 example_obj = example_class () example_obj.task ( ) example_obj .print (200) print ("test_obj 是 Absclass 的實例?", isinstance (test_obj, Absclass)) print ("example_obj 是 Absclass 的實例?", isinstance (example_obj, Absclass)) 

輸出:

 示例

其中,

Absclass &它是繼承自abc模塊的ABC類的抽像類。它包含對用戶可見的抽象 task () 方法和 print () 方法。從這個抽像類繼承的另外兩個類是 test_class example_class 。兩者都有自己的 task() 方法(抽象方法擴展)。

用戶從 test_class 和 example_class 類創建對象並調用 task() 方法後 對於這兩個,隱藏的 task () 方法定義在兩個類中發揮作用。這些定義對用戶是隱藏的。抽像類 Absclass 中的抽象方法 task() 從未真正被調用過。

但是當 print() 方法像 test_obj 和 example_obj 一樣被調用,print() Absclass 方法被調用是因為它不是抽象方法。

注意:我們不能實例化抽像類.這會導致錯誤。