導航:首頁 > 編程語言 > python面向對象編程詳解

python面向對象編程詳解

發布時間:2022-05-23 10:23:56

python面向對象編程之繼承與多態詳解

Python面向對象編程之繼承與多態詳解
本文實例講述了Python面向對象編程之繼承與多態。分享給大家供大家參考,具體如下:
Python 類的繼承
在OOP(Object Oriented Programming)程序設計中,當我們定義一個class的時候,可以從某個現有的class 繼承,新的class稱為子類(Subclass),而被繼承的class稱為基類、父類或超類(Base class、Super class)。
我們先來定義一個class Person,表示人,定義屬性變數 name 及 sex (姓名和性別);
定義一個方法print_title():當sex是male時,print man;當sex 是female時,print woman。參考如下代碼:
class Person(object):
def __init__(self,name,sex):
self.name = name
self.sex = sex
def print_title(self):
if self.sex == "male":
print("man")
elif self.sex == "female":
print("woman")
class Child(Person): # Child 繼承 Person
pass
May = Child("May","female")
Peter = Person("Peter","male")
print(May.name,May.sex,Peter.name,Peter.sex) # 子類繼承父類方法及屬性
May.print_title()
Peter.print_title()

而我們編寫 Child 類,完全可以繼承 Person 類(Child 就是 Person);使用 class subclass_name(baseclass_name) 來表示繼承;

繼承有什麼好處?最大的好處是子類獲得了父類的全部屬性及功能。如下 Child 類就可以直接使用父類的 print_title() 方法

實例化Child的時候,子類繼承了父類的構造函數,就需要提供父類Person要求的兩個屬性變數 name 及 sex:

在繼承關系中,如果一個實例的數據類型是某個子類,那它也可以被看做是父類(May 既是 Child 又是 Person)。但是,反過來就不行(Peter 僅是 Person,而不是Child)。

繼承還可以一級一級地繼承下來,就好比從爺爺到爸爸、再到兒子這樣的關系。而任何類,最終都可以追溯到根類object,這些繼承關系看上去就像一顆倒著的樹。比如如下的繼承樹:

isinstance() 及 issubclass()

Python 與其他語言不同點在於,當我們定義一個 class 的時候,我們實際上就定義了一種數據類型。我們定義的數據類型和Python自帶的數據類型,比如str、list、dict沒什麼兩樣。

Python 有兩個判斷繼承的函數:isinstance() 用於檢查實例類型;issubclass() 用於檢查類繼承。參見下方示例:

class Person(object):
pass
class Child(Person): # Child 繼承 Person
pass
May = Child()
Peter = Person()
print(isinstance(May,Child)) # True
print(isinstance(May,Person)) # True
print(isinstance(Peter,Child)) # False
print(isinstance(Peter,Person)) # True
print(issubclass(Child,Person)) # True

Python 類的多態

在說明多態是什麼之前,我們在 Child 類中重寫 print_title() 方法:若為male,print boy;若為female,print girl
class Person(object):
def __init__(self,name,sex):
self.name = name
self.sex = sex
def print_title(self):
if self.sex == "male":
print("man")
elif self.sex == "female":
print("woman")
class Child(Person): # Child 繼承 Person
def print_title(self):
if self.sex == "male":
print("boy")
elif self.sex == "female":
print("girl")
May = Child("May","female")
Peter = Person("Peter","male")
print(May.name,May.sex,Peter.name,Peter.sex)
May.print_title()
Peter.print_title()

當子類和父類都存在相同的 print_title()方法時,子類的 print_title() 覆蓋了父類的 print_title(),在代碼運行時,會調用子類的 print_title()

這樣,我們就獲得了繼承的另一個好處:多態。

多態的好處就是,當我們需要傳入更多的子類,例如新增 Teenagers、Grownups 等時,我們只需要繼承 Person 類型就可以了,而print_title()方法既可以直不重寫(即使用Person的),也可以重寫一個特有的。這就是多態的意思。調用方只管調用,不管細節,而當我們新增一種Person的子類時,只要確保新方法編寫正確,而不用管原來的代碼。這就是著名的「開閉」原則:

對擴展開放(Open for extension):允許子類重寫方法函數

對修改封閉(Closed for modification):不重寫,直接繼承父類方法函數

子類重寫構造函數

子類可以沒有構造函數,表示同父類構造一致;子類也可重寫構造函數;現在,我們需要在子類 Child 中新增兩個屬性變數:mother 和 father,我們可以構造如下(建議子類調用父類的構造方法,參見後續代碼):
class Person(object):
def __init__(self,name,sex):
self.name = name
self.sex = sex
class Child(Person): # Child 繼承 Person
def __init__(self,name,sex,mother,father):
self.name = name
self.sex = sex
self.mother = mother
self.father = father
May = Child("May","female","April","June")
print(May.name,May.sex,May.mother,May.father)

若父類構造函數包含很多屬性,子類僅需新增1、2個,會有不少冗餘的代碼,這邊,子類可對父類的構造方法進行調用,參考如下:
class Person(object):
def __init__(self,name,sex):
self.name = name
self.sex = sex
class Child(Person): # Child 繼承 Person
def __init__(self,name,sex,mother,father):
Person.__init__(self,name,sex) # 子類對父類的構造方法的調用
self.mother = mother
self.father = father
May = Child("May","female","April","June")
print(May.name,May.sex,May.mother,May.father)

多重繼承

多重繼承的概念應該比較好理解,比如現在需要新建一個類 baby 繼承 Child , 可繼承父類及父類上層類的屬性及方法,優先使用層類近的方法,代碼參考如下:
class Person(object):
def __init__(self,name,sex):
self.name = name
self.sex = sex
def print_title(self):
if self.sex == "male":
print("man")
elif self.sex == "female":
print("woman")
class Child(Person):
pass
class Baby(Child):
pass
May = Baby("May","female") # 繼承上上層父類的屬性
print(May.name,May.sex)
May.print_title() # 可使用上上層父類的方法
class Child(Person):
def print_title(self):
if self.sex == "male":
print("boy")
elif self.sex == "female":
print("girl")
class Baby(Child):
pass
May = Baby("May","female")
May.print_title() # 優先使用上層類的方法

❷ Python中的面向對象是什麼意思

計算機剛出現不久,產生了一種常見的編程範式是面向過程,其構造類似於做菜的配方,因為它以函數和代碼塊的形式提供一組步驟,這些步驟順序地流動以完成任務。用面向過程的語言開發一款銀行軟體系統的取款模塊,設計思路是基於取款這個過程的。首先,插入銀行卡、輸入密碼、ATM驗證賬號和密碼。其次,輸入取款金額、ATM驗證余額、ATM驗證賬號和密碼。最後ATM吐出鈔票。面向過程的軟體開發就是圍繞這些步驟來設計的。

然而,面向過程的代碼在代碼規模變大時會難以理解和維護,不利於修改和擴充(增加新功能),也不利於代碼的重用。因此軟體開發發展形成了面向對象的分析設計。

同樣是銀行軟體系統的取款模塊,面向對象是圍繞取款操作中有哪些參與者來設計軟體的。參與者包括:銀行卡,客戶和ATM機。銀行卡包含賬號和密碼。插入銀行卡、輸入密碼和輸入取款金額都是客戶的動作。驗證賬號和密碼、驗證余額以及吐出鈔票都是ATM的行為。圍繞對象來設計軟體時。首先以姓名為參數實例化用戶類創建一個用戶對象。然後以用戶、卡號、密碼為參數,實例化銀行卡類創建一個銀行卡對象。然後以銀行卡對象為參數實例化ATM類創建一個ATM機對象。然後調用驗證用戶名密碼方法和吐鈔票方法,完成取鈔功能。當修改驗證密碼的代碼時,比如改為人臉驗證,其它地方是不受影響的。這就是面向對象開發的一個重大的好處。

總結來說,面向對象它是在面向過程滿足不了軟體發展需求的背景下出現的。它更符合人類的思考方式。所以面向對象的優勢非常明顯,具體表現在四個方面:

①可維護性好。

②可擴展性好,系統里新加一個模塊,代碼的影響能降到最低。

③可重用性好,別的系統可以非常方便的重用這個系統里某個模塊的代碼,幾乎不用更改。

④和面向過程相比,面向對象開發效率更高。

知道了面向對象的優勢,下面引入面向對象的定義。面向是以……為導向的,以……為目標的意思。對象是物體、目標、客體和對象的意思。因此面向對象的定義是:以對象為導向,圍繞對象來開發應用程序的軟體開發方法。

關於Python的基礎問題可以看下這個網頁的視頻教程,網頁鏈接,希望我的回答能幫到你。

❸ python是面向什麼的高級語言

面相對象、解釋型。

Python支持多種編程范型,包括函數式、指令式、反射式、結構化和面向對象編程。它擁有動態類型系統和垃圾回收功能,能夠自動管理內存使用,並且其本身擁有一個巨大而廣泛的標准庫。它的語言結構以及面向對象的方法旨在幫助程序員為小型的和大型的項目編寫清晰的、合乎邏輯的代碼。

吉多·范羅蘇姆於1980年代後期開始研發Python,它是作為ABC語言的後繼者,也可以視之為使用叫做的M-表達式的一種傳統中綴表示法的LISP方言。

吉多·范羅蘇姆於1991年首次發布 Python 0.9.0。Python2.0於2000 年發布並引入了新功能。Python3.0於2008年發布,是該語言的主要修訂版,並非完全向後兼容。 Python2於2020年隨2.7.18版停止使用。

Python的設計哲學強調代碼的可讀性和簡潔的語法,尤其是使用空格縮進劃分代碼塊。相比於C或Java,Python讓開發者能夠用更少的代碼表達想法。

Python解釋器本身幾乎可以在所有的操作系統中運行。Python的官方解釋器CPython是用C語言編寫的,它是一個由社群驅動的自由軟體,目前由Python軟體基金會管理。

特徵

Python是多范型編程語言。它完全支持結構化編程和面向對象編程,還有很多特徵支持函數式編程和元編程比如元對象協議(元類和魔術方法)。

通過擴展還可以支持很多范型,包括面向切面編程、契約式設計和邏輯編程。

Python使用動態類型,在內存管理上採用引用計數和環檢測相結合的垃圾收集器。它的特徵還有動態名字解析(後期綁定),即在程序執行期間綁定方法和變數的名字。

Python對遵循LISP傳統的函數式編程提供了有限的支持,它提供了map、filter和rece函數;列表推導式、字典、集合和生成器表達式。

❹ 什麼是python編程

Python是一門新興的編程語言,編程語言有很多,比如C++、Java、C#、PHP、JavaScript等,Python也是其中之一,在學習Python前,我們需要對它有一定的了解。
Python支持多種編程范型,如函數式、指令式、結構化、面向對象和反射式編程。
Python解釋器易於擴展,可以使用C或C++或其他可以通過C調用的語言擴展新的功能和數據類型。
Python編寫的程序不需要編譯成二進制代碼,可以直接從源代碼運行程序,在計算機內部,Python解釋器把源代碼轉換成位元組碼的中間形式,然後再把它翻譯成計算機使用的機器語言並運行。
語法簡潔而清晰,具有豐富和強大的類庫,使用Python快速生成程序的原型,然後對其中有特別要求的部分,用更合適的語言改寫,性能要求特別高,就可以用C/C++重寫,而後封裝為Python可以調用的擴展類庫。
只有基礎建牢固了,才會更利於我們以後的發展及進步,現如今Python的發展十分迅速,已經將C++語言甩在了後邊,在不久的將來,可能會超過C和Java這些主流語言。

❺ Python語言是面向對象的語言嗎

是的,Python是面向對象的編程語言,並具備以下特徵:
封裝
面向對象程序設計中的術語對象(Object)基本上可以看做數據(特性)以及由一系列可以存取、操作這些數據的方法所組成的集合。傳統意義上的「程序=
數據結構+演算法」被封裝」掩蓋「並簡化為「程序=對象+消息」。對象是類的實例,類的抽象則需要經過封裝。封裝可以讓調用者不用關心對象是如何構建的而直接進行使用。
繼承
類繼承:
繼承給人的直接感覺是這是一種復用代碼的行為。繼承可以理解為它是以普通的類為基礎建立專門的類對象,子類和它繼承的父類是IS-A的關系。
多重繼承:
不同於C#,Python是支持多重類繼承的(C#可繼承自多個Interface,但最多繼承自一個類)。多重繼承機制有時很好用,但是它容易讓事情變得復雜。
多態
多態意味著可以對不同的對象使用同樣的操作,但它們可能會以多種形態呈現出結果。在Python中,任何不知道對象到底是什麼類型,但又需要對象做點什麼的時候,都會用到多態。方法是多態的,運算符也是多態的。

❻ 初學者學習python編程要掌握什麼內容

【導語】目前,人工智慧編程課已經納入中小學生教學課程。隨著5G、大數據和人工智慧的發展,python開發語言也隨之興起。作為大數據分析挖掘工程師,我們也應該掌握python這門必備語言,那麼初學者學習python編程要掌握什麼內容呢?

1、linux基本命令

linux系統,shell操作,文件和目錄,文件屬性修改命令,查找與檢索命令,磁碟管理,壓縮管理,進程管理,用戶管理,網路管理,其它命令,常用伺服器ftp、ssh、samaba,編輯器vim、sublime、getdit、gcc工具鏈,redhat軟體安裝與卸載、centos軟體安裝與卸載。

2、PYTHON語法基礎

基礎數據類型,變數本質,簡單函數,輸入輸出函數,局部變數和全局變數,算術表達式,邏輯表達式,關系表達式,位運算,語法格式,分支語句,循環語句,break,continue,list列表-增刪改查截取操作,tuple元組-查和截取操作,dictionary字典-增刪改查操作,函數高級,函數的參數詳解,函數的調用關系,值傳遞參數和引用傳遞參數,匿名函數,return語句,變數作用域,數字類型轉換,數學函數,內建range函數,隨機函數。

3、PYTHON字元串解析

python訪問字元串中的值,python字元串更新,python字元串運算符,python字元串格式化。

4、PYTHON時間與日歷

時間和日期,獲取格式化的時間,獲取某月日歷,time模塊的內置函數,日歷(calendar)模塊。

5、PYTHON文件操作

終端輸入和輸出,打開和關閉文件,file對象的屬性,close()方法,write()方法,read()方法,seek()方法,重命名和刪除文件,python里的目錄,chdir()方法,getcwd()方法,rmdir()方法,文件目錄相關的方法,windows、linux平台下相關差異性。

6、PYTHON面向對象

面向對象思想,類和對象,類的繼承,多態,類屬性和實例屬性,靜態方法和類方法。

初學者學習python編程需要掌握的內容,就給大家分享到這里了,希望對於大家能有所幫助,當然Python編程學習不僅需要進行工具學習,還需要學習很多的編程知識,希望大家好好學起來哦,加油!

❼ 《Python面向對象編程指南豆瓣》pdf下載在線閱讀全文,求百度網盤雲資源

《Python面向對象編程指南豆瓣》網路網盤pdf最新全集下載:
鏈接:https://pan..com/s/1gqhzxguIli3azhI1vTdPWQ

?pwd=e8ir 提取碼:e8ir
簡介:Python是一種面向對象、解釋型的程序設計語言,它已經被成功應用於科學計算、數據分析以及游戲開發等諸多領域。

本書深入介紹Python語言的面向對象特性,全書分3個部分共18章。第1部分講述用特殊方法實現Python風格的類,分別介紹了__init__()方法、與Python無縫集成—基本特殊方法、屬性訪問和特性及修飾符、抽象基類設計的一致性、可調用對象和上下文的使用、創建容器和集合、創建數值類型、裝飾器和mixin—橫切方面;第2部分講述持久化和序列化,分別介紹了序列化和保存、用Shelve保存和獲取對象、用SQLite保存和獲取對象、傳輸和共享對象、配置文件和持久化;第3部分講述測試、調試、部署和維護,分別介紹了Logging和Warning模塊、可測試性的設計、使用命令行、模塊和包的設計、質量和文檔。

本書深入剖析Python,幫助讀者全面掌握Python並構建出更好的應用程序,非常適合對Python語言有一定了解並想要深入學習Python的讀者,也適合有一定開發經驗並且想要嘗試使用Python語言進行編程的IT從業人員。

❽ Python中面向對象是什麼意思

Python既支持面向過程的編程也支持面向對象的編程。在「面向過程」的語言中,程序是由過程或僅僅是可重用代碼的函數構建起來的。在「面向對象」的語言中,程序是由數據和功能組合而成的對象構建起來的。比如說C主要面向過程,而JAVA主要面向對象。

閱讀全文

與python面向對象編程詳解相關的資料

熱點內容
台達PLC編譯按鈕在哪裡 瀏覽:137
非編程計算器多少錢 瀏覽:653
房本還完貸款解壓 瀏覽:816
中國程序員有出名嗎 瀏覽:546
亳州雲伺服器 瀏覽:630
程序員最難的面試 瀏覽:892
配音秀app怎麼誦讀 瀏覽:750
sparkcore源碼 瀏覽:100
程序員中年生活 瀏覽:355
讀取加密信息失敗怎麼回事 瀏覽:510
編譯過程之後是預處理嗎 瀏覽:351
安卓是基於什麼做出來 瀏覽:600
視頻字幕提取APP怎麼使用 瀏覽:59
js通過ip地址連接伺服器嗎 瀏覽:848
java數字金額大寫金額 瀏覽:858
人人影視路由器固件編譯 瀏覽:967
照片通訊錄簡訊怎麼從安卓到蘋果 瀏覽:458
邏輯開發編譯環境 瀏覽:672
ce自己編譯 瀏覽:898
javaexe進程 瀏覽:478