程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

[Python Open Course] Playing with Python Advanced with Zero Basics----Section 10: Object-Oriented Programming

編輯:Python

攜手創作,共同成長!這是我參與「掘金日新計劃 · 8 月更文挑戰」的第4天,點擊查看活動詳情

1️⃣ 面向對象編程概述

1.1面向對象編程定義

面向對象的編程,顧名思義就是面向你的男朋友or女朋友(俗稱對象),去進行編程! 這時候有的小伙伴會問啦:那我沒對象怎麼面向對象編程呢~ 答:這個時候你可以跳過面向對象編程,去學習面向單身狗編程

哈哈哈,開個玩笑,那什麼是真正的面向對象編程呢? 定義 在現實世界中存在各種不同形態的事物,這些事物之間存在著各種各樣的聯系.在程序中使用對象來映射現實中的事物,使用對象間的關系來描述事物之間的聯系,這種思想就是面向對象.

1.2面向過程and面向對象

分別使用面向過程和面向對象來實現五子棋: 1.面向過程: 開始游戲️黑子先走️繪制畫面️輪到白子️繪制畫面️判斷輸贏️返回步驟2️輸出最後結果️️️ 即:先分析解決問題的步驟️使用函數把這些步驟以此實現️用的時候需要逐個調用函數 2.面向對象: 黑白雙方:這兩方的行為一樣️棋盤系統:負責繪制畫面️規則系統:負責判斷諸如犯規、輸贏等️️️ 即:把解決問題的事物分為多個對象️️️對象具備解決問題過程中的行為 ️️️ 若加入悔棋功能,面向過程和面向對象,分別怎麼實現呢?
面向過程:從輸入到判斷到顯示的一系列步驟都需要改動 面向對象:只需要改動棋盤對象就可以

2️⃣ 類和對象

2.1類和對象的關系

面向對象編程有兩個非常重要的概念:類和對象.對象是面向對象編程的核心. 具有相似特征和行為的事物的集合統稱為類. 對象是根據類創建的,一個類可以對應多個對象. 可以把玩具模型看作一個類 把每個玩具看作一個對象

2.2類的定義

定義 類是由3部分組成的:

  1. 類的名稱:類名.
  2. 類的屬性:一組數據,比如性別.
  3. 類的方法:允許進行操作的方法,比如說話.

使用class關鍵字來聲明一個類,基本格式如下: 語法格式

class 類名:
類的屬性
類的方法
復制代碼

2.3根據類創建對象

1.根據類創建對象的語法格式如下: 語法格式

對象名 = 類名()
復制代碼

2.要想給對象添加屬性,可以通過如下方式: 語法格式

對象名.新的屬性名 = 值
復制代碼

3️⃣構造方法和析構方法

3.1構造方法

定義 構造方法指的是 __init__方法. 當創建類的實例的時候,系統會自動調用構造方法,從而實現對類進行初始化的操作.

語法格式

class Car:
def __init__(self):
self.color = '黑色'
def toot(self):
print("%s的車在鳴笛..."%(self.color))
復制代碼

️ 調用️方法 ️

 bmw = Car()
bmw.toot()
復制代碼

3.2析構方法

定義 當刪除一個對象來釋放類所占用資源的時候,Python解釋器默認會調用另外一個方法,這個方法就是__del__( )方法. __del__方法被稱為析構方法.

4️⃣self的使用

定義 在方法的列表中,第1個參數永遠都是self. ️self的字面意思是自己,我們可以把它當做C++裡面的this指針理解,表示的是對象自身. 當某個對象調用方法的時候,Python解釋器會把這個對象作為第1個參數傳給self,開發者只需要傳遞後面的參數就可以了.

語法格式

class Dog:
def __init__(self, newColor):
self.color = newColor
def printColor(self):
print("顏色為:%s"%self.color)
復制代碼

️ 調用️方法 ️

dog1 = Dog("白色")
dog1.printColor()
復制代碼

5️⃣封裝

定義 封裝,顧名思義就是將內容封裝到某個地方,以後再去調用被封裝在某處的內容. ️對於面向對象的封裝來說,其實就是使用構造方法將內容封裝到 對象 中,然後通過對象直接或者self間接獲取被封裝的內容.

語法格式

class Person:
def __init__(self, name, age):
self.name = name
self.age = age
laowang = Person('徐', 30)
laowang.age = 300
print(laowang.age)
# 300
復制代碼

️人的年齡可以隨便設置,顯然不可行️

為了保護類裡面的屬性,可以采用如下方式解決: 把屬性定義為私有屬性,即在屬性名的前面加上兩個下劃線; 添加用於設置或獲取屬性值的兩個方法供外界調用.

6️⃣繼承

定義 在現實生活中,繼承一般指的是子女繼承父輩的財產. 在程序中,繼承描述的是事物之間的所屬關系.

6.1單繼承

類的繼承是指在一個現有類的基礎上構建一個新的類,構建出來的新類被稱作子類. ️波斯貓和巴厘貓都繼承自貓,而沙皮狗和斑點狗都繼承狗️

Python程序中,繼承使用如下語法格式標注: 語法格式

class 子類名(父類名):
復制代碼

假設有一個類為A,A派生出來了子類B,示例如下: 語法格式

class B(A):
class A(object):
復制代碼

️默認是繼承自object的️

6.2 多繼承

現實生活中,一個派生類往往會有多個基類.比如沙發床是沙發和床的功能的組合,這都是多重繼承的體現. ️Python支持多繼承,多繼承就是子類擁有多個父類,並且具有它們共同的特征,即子類繼承了父類的方法和屬性.️ ️水鳥擁有了魚和鳥的特征 ️

多繼承可以看做是單繼承的擴展,語法格式如下: 語法格式

class 子類名(父類1,父類2…):
復制代碼

️如果子類繼承的多個父類間是平行的關系,子類先繼承的哪個類就會調用哪個類的方法.️

7️⃣多態

定義 多態的概念其實不難理解,它是指對不同類型的變量進行相同的操作,它會根據對象(或類)類型的不同而表現出不同的行為.

7.1Python中多態的作用

讓具有不同功能的函數可以使用相同的函數名,這樣就可以用一個函數名調用不同內容(功能)的函數.

7.2Python中多態的特點

1、只關心對象的實例方法是否同名,不關心對象所屬的類型; 2、對象所屬的類之間,繼承關系可有可無; 3、多態的好處可以增加代碼的外部調用靈活度,讓代碼更加通用,兼容性比較強; 4、多態是調用方法的技巧,不會影響到類的內部設計.

語法格式 ️A類:

class A(object):
def test(self):
print("--A--test")
復制代碼

B類:

class B(A):
def test(self):
print("--B--test")
復制代碼

代碼展示

class A(object):
def test(self):
print("--A--test")
class B(A):
def test(self):
print("--B--test")
def func(temp):
temp.test()
a = A()
b = B()
func(a)
func(b)
# --A--test
# --B--test
復制代碼

8️⃣類屬性和實例屬性

8.1類屬性

類屬性是類所擁有的屬性,它需要在類中進行顯示地定義(位於類內部,方法的外面),它被所有類的實例對象所共有,在內存中只存在一個副本.

語法格式

class Cat(object):
#類屬性
num = 0
復制代碼

8.2實例屬性

通過“實例.屬性”添加屬性的屬性都是實例屬性. 語法格式

def __init__(self):
#實例屬性
self.age = 1
復制代碼

9️⃣類方法和靜態方法

9.1類方法

使用修飾器 @classmethod來標識類方法 語法格式

class 類名:
 @classmethod
def 類方法名(cls):
方法體
復制代碼

要想調用類方法,既可以通過對象名調用類方法,又可以通過類名調用類方法,這兩種方法沒有任何區別.

9.2靜態方法

使用修飾器 @staticmethod來標識靜態方法

class 類名:
 @staticmethod
def 靜態方法名():
方法體
復制代碼

️靜態方法是沒有self參數,在靜態方法中無法訪問實例變量. 靜態方法中不可以直接訪問類屬性,但是可以通過類名引用類屬性. ️靜態方法跟定義它的類沒有直接關系,只是起到了類似函數的作用.

本章小結----知難易

本章首先介紹了面向對象編程的基本知識,包括面向對象概述、類和對象、根據類創建對象,然後介紹了 構造方法和析構方法 的使用,然後又介紹了self和__str__方法的簡單使用,最後開發了一個反恐游戲的案例.通過對本章內容的學習,大家對面向對象應該有初步的了解,為後面面向對象深入的學習做好鋪墊. 然後介紹了面向對象編程的知識,包括面向對象的三大特征(封裝、繼承和多態,然後介紹了類屬性和實例屬性,最後介紹了類方法和靜態方法.通過對本章內容的學習,大家應該對面向對象有了深入地理解,為面向對象編程埋下了伏筆.

人生是跋涉,也是旅行;是等待,也是重逢;是探險,也是尋寶;是眼淚,也是歌聲!

好啦,這就是今天要分享給大家的全部內容了,我們下期再見! 如果你喜歡的話,就不要吝惜你的一鍵三連了~


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved