Python物件導向簡介


程式設計語言不斷湧現,不同的方法也不斷湧現。物件導向的程式設計就是這樣一種方法,在過去的幾年中變得非常流行。

本章講述了Python程式設計語言的特性,使其成為一種物件導向的程式設計語言。

程式設計語言規劃分類

Python可以在物件導向程式設計方法論下進行表徵。 下圖顯示了各種程式設計語言的特性。 觀察使其物件導向的Python特性。

  • 程式設計正規化
    • 過程程式,主要有 - C, C++, C#, Objective-C, java, Go
    • 指令碼,主要有 - CoffeeScript, JavaScript, Python, Perl, Php, Ruby
    • 函式式,主要有 - Clojure, Eralang, Haskell, Scala
  • 編譯類
    • 靜態,主要有 - C, C++, C#, Objective-C, java, Go, Haskell, Scala
    • 動態,主要有 - CoffeeScript, JavaScript, Python, Perl, Php, Ruby, Clojure, - 型別類
    • 強型別,主要有 - C#, java, Go, Python, Ruby, Clojure, Erlang, Haskell, Scala
    • 弱型別,主要有 - C, C++, C#, Objective-C, CoffeeScript, JavaScript, Perl, Php
  • 記憶體類
    • 託管,其它
    • 非託管,主要有 - C, C++, C#, Objective-C

什麼是物件導向程式設計?

物件導向意味著物件導向。 換句話說,它意味著功能上針對建模物件。 這是用於通過資料和行為描述一系列互動物件來為複雜系統建模的眾多技術之一。

Python是物件導向程式設計(OOP),是一種程式設計方式,專注於使用物件和類來設計和構建應用程式。物件導向程式設計(OOP)的主要支柱是繼承,多型,抽象和封裝。

物件導向分析(OOA)是檢查問題,系統或任務並識別它們之間的物件和相互作用的過程。

為什麼選擇物件導向程式設計?

Python是用物件導向的方法設計的。 OOP提供以下優點 -

  • 提供清晰的程式結構,可以輕鬆對映真實世界的問題及其解決方案。
  • 便於維護和修改現有的程式碼。
  • 由於每個物件都是獨立存在的,因此可以輕鬆新增新功能而不會打擾現有物件,從而增強了程式的模組化。
  • 為程式碼庫提供了一個很好的框架,供程式員輕鬆修改和修改提供的元件。
  • 賦予程式碼可重用性

程式與物件導向程式設計

基於程式的程式設計源於基於功能/過程/例程概念的結構程式設計。 在面向程式的程式設計中存取和更改資料很容易。 另一方面,物件導向程式設計(Object Oriented Programming,OOP)允許將問題分解成多個稱為物件的單元,然後在這些物件周圍構建資料和函式。 它比過程或功能更強調資料。 在OOP中,資料也是隱藏的,不能被外部程式存取。

下圖中的表格顯示了POP和OOP方法的主要區別。

程式化程式設計(POP)與程式化程式設計(POP)的區別。 物件導向程式設計(OOP)。

序號/項 程式化程式設計 物件導向程式設計
基於 整個焦點集中在資料和函式上 基於真實世界的場景。整個程式劃分為稱為物件的小部分
可重用性 有限的程式碼重用 程式碼重用性高
途徑 自上而下的方法 物件導向的設計
存取說明符 沒有 public, private 以及 protected
資料移動 資料可以從功能中自由移動到系統中的功能 在Oops中,資料可以通過成員函式進行移動和相互通訊
資料存取 大多數功能使用全域性資料進行共用,可以從系統中的功能自由存取 資料不能在方法之間自由移動,它可以儲存在公共或私人的位置,這樣就可以控制資料的存取
資料隱藏 在流行中,隱藏資料的方式非常特殊,所以安全性稍差 它提供資料隱藏,更安全
過載 不可能 函式和運算子過載
範例語言 C, VB, Fortran, Pascal C++, Python, Java, C#
抽象化 在過程級別使用抽象 在類和物件級別使用抽象

物件導向程式設計原理

物件導向程式設計(Object Oriented Programming,OOP)是基於物件而不是動作的概念,以及資料而不是邏輯。 想要使程式設計語言成為物件導向,它應該有一種機制來支援類和物件的使用,以及基本的物件導向原則和概念的實現和使用,即繼承,抽象,封裝和多型。

下面簡單了解物件導向程式設計的各個支柱 -

封裝
該屬性隱藏了不必要的細節,並使管理程式結構變得更加容易。 每個物件的實現和狀態都隱藏在明確定義的邊界之後,並為它們提供了一個乾淨而簡單的介面。 實現這一目標的一種方法是將資料保密。

繼承
繼承也稱為泛化,它允許我們捕獲類和物件之間的層次關係。 例如,「水果」是「橙色」的泛化。 從程式碼重用的角度來看,繼承非常有用。

抽象化
這個屬性允許我們隱藏細節,只顯示概念或物件的基本特徵。 例如,駕駛滑板車的人知道在按喇叭時發出聲音,但不知道如何在按下喇叭時實際產生應該是什麼樣的聲音。

多型性
多型性意味著許多形式。 也就是說,某件事或行為是以不同的形式或方式呈現的。 多型的一個很好的例子是類中的建構函式過載。

Python物件導向

Python程式設計的核心是物件和OOP,但是您不需要通過將程式碼組織到類中來限制自己使用OOP。 OOP增加了Python的整個設計理念,並鼓勵一種乾淨而實用的程式設計方式。 物件導向還可以編寫更大更複雜的程式。

模組與類和物件

模組就像「字典」,在使用模組時,請注意以下幾點 -

  • Python模組是封裝可重用程式碼的包。
  • 模組儲存在一個有__init__.py檔案的檔案夾中。
  • 模組包含功能和類。
  • 模組使用import關鍵字匯入。

字典是一個鍵值對。 這意味著如果有一個關鍵的EmployeID字典,如果想檢索它,那麼需要使用下面的程式碼行 -

employee = {"EmployeID": "Employee Unique Identity!"}
print (employee ['EmployeID'])

可通過使用以下過程來處理模組 -

  • 模組是一個包含一些函式或變數的Python檔案。
  • 匯入需要的檔案。
  • 現在,可以使用.(點)運算子存取該模組中的函式或變數。

考慮有一個名為employee.py的模組,其中包含一個名為employee的函式。 該函式的程式碼如下所示 -

# this goes in employee.py
def EmployeID():
   print ("Employee Unique Identity!")

現在匯入模組,然後存取函式EmployeID -

import employee
employee.EmployeID()

可以在其中插入名為Age的變數,如下所示 -

def EmployeID():
    print ("Employee Unique Identity!")
# just a variable
Age = "Employee age is **"

現在,按照以下方式存取該變數 -

import employee
employee.EmployeID()
print(employee.Age)

現在,我們來比較一下字典 -

Employee['EmployeID'] # get EmployeID from employee
Employee.employeID() # get employeID from the module
Employee.Age # get access to variable

請注意,Python中有常見的模式 -

  • 以一個key = value風格的容器
  • 通過鍵的名稱獲取某些內容

將模組與字典進行比較時,兩者都是相似的,除了以下內容 -

  • 在字典的情況下,鍵是一個字串,語法是[key]
  • 在模組的情況下,鍵是一個識別符號,語法是.key

類就像模組

模組是一個專門的字典,可以儲存Python程式碼,所以你可以用.操作符來獲得它。 類是一種對函式和資料進行分組並將其放置在容器中的方式,以便您可以使用.操作符存取它們。

如果要建立一個類似於員工模組的類,則可以使用以下程式碼執行此操作 -

class employee(object):
    def __init__(self):
        self. Age = 「Employee Age is ##」
    def EmployeID(self):
        print (「This is just employee unique identity」)

註 - 類比模組更受歡迎,因為它可以按原樣重用它們,且不會受到太多干擾。 使用模組時,整個程式只有一個。

物件就像小型的模組
一個類就像一個迷你版本的模組,可以用類似的方式匯入類,就像使用類範例一樣。 請注意,當範例化一個類時,會得到一個物件。

您可以範例化一個物件,類似於像函式一樣呼叫一個類,如圖所示 -

this_obj = employee() # Instantiatethis_obj.EmployeID() # get EmployeId from the class
print(this_obj.Age) # get variable Age

可以通過以下三種方式中的任何一種來執行此操作 -

# dictionary style
Employee['EmployeID']
# module style
Employee.EmployeID()
Print(employee.Age)
# Class style
this_obj = employee()
this_obj.employeID()
Print(this_obj.Age)