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面向對象

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)