在開發人員中,面向對象的編程吸引了大量的追隨者。 流行的計算機語言 Python 同樣遵循面向對象的範式。
它處理在 Python 中定義對象和類,這是 OOP 原則的基礎。 在本教程“Python 中的面向對象編程”中,您將學習如何聲明 Python 類、從它們創建對像以及使用四種 OOP 技術。
所以,第一件事。
什麼是面向對象的編程?
面向對象編程(OOP)的主要焦點是“對象”的創建。 相互關聯的變量和函數的集合構成了一個對象。
這些變量經常被稱為對象的屬性,而它的行為通常被稱為它的功能。 這些項目為應用程序提供了更有效和更易於理解的結構。 汽車是物品的一個例子。
如果汽車是一個物品,它的屬性將包括它的顏色、型號、價格、品牌等。此外,它會加速、減速和換檔。
另一個例子:如果我們把狗看成一個物品,那麼它的一些特徵可能是顏色、品種、名字、重量等。它會四處走動、吠叫、玩耍等。
因為它將對象、隱藏、繼承等現實世界的概念結合到編程中,所以面向對象編程是眾所周知的。 因為它與現實世界的情況非常相似,所以可視化變得更簡單。
面向對象的編程概念
Python 中的類和對象
與所有其他面向對象的語言一樣,Python 使您能夠設計類來生成對象。 Python 中最流行的數據類型,包括字符串、列表、字典和其他對象,都是內置類。
類是一組定義某種對象的鏈接方法和實例變量。 一個類可以被視為一個對象的模型或模板。 構成類的變量稱為屬性。
對像是具有已定義屬性集的類的成員。 因此,可以使用同一個類創建任意數量的對象。
Python 類是使用單詞 class 定義的,然後是類名和冒號。 鸚鵡類的示例可能是:
在這裡,我們使用 class 關鍵字聲明空類 Parrot。 我們從類創建實例。 實例是由某個類製成的特定對象。 'pass' 經常被用作我們暫時可以放棄其實現的代碼的替代。 我們可以通過使用“pass”關鍵字來執行 Python 代碼而不會引發錯誤。
類的實例化產生一個對象(實例)。 創建類時只定義對象的描述。 因此,沒有分配存儲或 RAM。
鸚鵡類對象的一個例子是:
在此實例中,Obj 是 Parrot 類對象。
假設我們知道鸚鵡的細節。 我們現在將演示如何創建鸚鵡類及其對象。
特殊方法(__init__)
一個名為 init 的方法定義了每個 Parrot 對象必須具有的屬性 ()。 當一個新的 Parrot 對象形成時,函數 __init__ 通過分配我們在對象屬性中提供的值來創建對象的初始狀態。
因此,類的每個新實例都使用 __init__() 進行初始化。 儘管 __init__() 可以接受任意數量的參數,但 self 始終是第一個參數。
自變量中包含對活動類實例的引用。 self 參數鏈接到類的當前對象的地址,並讓我們可以訪問其(對象的)變量的數據,這表明了這一點。
例如1
我們在上面的代碼中建立了一個名為 Parrot 的類。 接下來,定義屬性。 事物的特徵就是它的屬性。 類的 __init__ 函數是指定這些特徵的地方。
當一個對象形成時,初始化方法是最初被調用的方法。 然後,創建 Parrot 類的實例。 在這種情況下,Blaze 和 Wonda 是對我們新對象的引用(值)。 __class .species 允許我們訪問類屬性。
類的每個實例都具有相同的特徵。 也可以使用 blaze.name 和 blaze.age 訪問實例特徵。 但是,一個類的所有實例都具有唯一的實例屬性。
例如2
方法
在類體內定義的函數稱為方法。 它們用於指定項目的行為方式。
前面提到的應用程序 () 中定義了兩個方法,sing() 和 dance。 因為它們是在實例對象(例如火焰)上調用的,所以它們被稱為實例方法。
OOPS 概念的基礎
面向對象編程的四個核心思想是:
- 遺產
- 封裝
- 多態性
- 抽象化
遺產
人們經常告訴新生兒,他們的面部特徵與父母相似,或者他們從父母那裡繼承了特定的特徵。
您可能還觀察到您與父母有一些共同特徵。 現實世界的情況也與繼承非常相似。
但是,在這種情況下,“父類”的特徵會傳遞給“子類”。 在本文中,這些方面被稱為“屬性”和“方法”。
一個類可以通過使用稱為繼承的技術從另一個類派生其方法和屬性。 繼承是子類接收父類屬性的過程。
例:
父類 Human 由上例中的子類 Boy 繼承。 因為 Boy 是從 Human 繼承的,所以我們可以在創建 Boy 類的實例時訪問它的所有方法和屬性。
在 Boy 類中,還定義了一個名為 schoolName 的方法。 父類對象無法訪問方法 schoolName。 但是,可以通過創建子類對象 (Boy) 來調用 schoolName 方法。
封裝
在使用類和處理敏感數據時,為程序中的每個變量提供全局訪問權限並不是明智之舉。
在不讓程序完全訪問這些變量的情況下,封裝為我們提供了一種獲取必要變量的機制。
為此目的明確定義的方法可用於更新、編輯或刪除變量中的數據。 這種編程方法具有增強的安全性和對數據輸入的控制的優點。
在下面的演示中查看變量的訪問速度有多快:
多態性
假設您正在使用手機瀏覽 Instagram的飼料. 當你有聽音樂的衝動時,你訪問了 Spotify 並開始播放你最喜歡的歌曲。
過了一會兒,你接到了一個電話,所以你在後台暫停了你正在做的任何事情來接聽它。 您的朋友打來電話,要求您向他們發送某個人的電話號碼。
因此,您通過短信向他發送了電話號碼並繼續您的任務。 你有什麼收穫嗎? 只需一個設備(您的手機),您就可以瀏覽訂閱源、聽音樂、接聽和撥打電話以及發送信息。
因此,多態性與此相當。 Poly表示眾多,morph表示不同的形式。 因此,多態性作為一個整體是指具有各種形式的事物。
或者“某物”,根據情況,可以表現出各種行為。 在 OOPS 中,多態性描述了具有相同名稱但行為不同的函數。 或者,具有相同函數名稱(傳遞給函數的參數)的不同函數簽名。
例:
在這裡,我們可以使用變量 animal 來遍歷 Zebra 和 Rabbit 的對象,使用它們各自的實例方法。 因此,斑馬和兔子的行為(color() & eats())在這裡都由一個名為 animal 的變量來表示。 因此,它遵守多態性規則。
抽象化
您很可能使用筆記本電腦、手機或平板電腦來閱讀此內容。 在閱讀它的同時,您可能還在做筆記,在關鍵段落下劃線,並且可能將一些信息存儲在您的個人文件中。
當您閱讀本文時,您所能看到的只是一個“屏幕”,其中包含正在向您顯示的數據。 您只需在鍵入時看到鍵盤的按鍵,因此您不必擔心內部的細微差別,例如按下某個鍵會導致該單詞出現在屏幕上。
或者,按下屏幕上的按鈕如何啟動新標籤。
因此,在這種情況下我們可以觀察到的任何東西都是抽象的。 我們只能看到它正在創造的結果,而不是內部的複雜性(這對我們來說實際上很重要)。
與此類似,抽象僅揭示一切事物所具有的功能,而隱藏任何實現或內部細節。
抽象的主要目標是隱藏背景信息和任何無關的數據實現,以便人們只看到他們需要看到的東西。 它有助於管理代碼的複雜性。
例:
此處存在與車輛相關的抽像類。 因為繼承自抽像類ABC,所以是抽象的。 因為抽象方法未定義或保持為空,Vehicle 類有一個名為 no of Wheels 的抽象方法,它缺少定義。
他們期望繼承抽像類的類給出方法的實現。
OOPS 概念的好處
- 通過封裝,實現了高安全性和數據隱私。
- 具有同一類的許多多態版本的靈活性。
- 抽象化降低了高水平的代碼複雜性。
- 無需篩選數百行代碼來定位單個問題,編程的模塊化使調試變得簡單。
- 代碼重用是由子類繼承父類屬性引起的。
- 有效的問題解決是可能的,因為我們創建了為每個小問題執行必要操作的類。 由於我們可以重用這些類,因此可以更快地解決以下問題。
結論
總之,我們了解了 Python 中的 OOPS 思想,這是目前最熱門的編程範式。
讀完之後,你一定已經意識到 OOPS 範式完全是處理類和對象的思想。 以及 OOPS 概念,例如封裝、多態、繼承和抽象。
發表評論