python編程入門之十四:面向對象編程--類和對象

第十四章:類和對象

相信在前面十章的基礎講解之後,認真學習過的同學已經對python掌握的有點頭緒了,但你要是認爲python原來就這麼簡單,就這點東西,那我只能說這是小巫見大巫了。有了前面的程序基礎,今天我再給大家介紹一個有意思的知識點,這個姿勢可以算是python裏面的重難點了。

14.1 給大家介紹對象

(1)專業點的解釋:
大家之前應該都聽說過封裝的概念。
把亂七八糟的數據扔進一個列表,這是一種封裝,是數據層面的封裝。
把常用的代碼段打包成一個函數,這也是一種封裝。
對象也是一種封裝的思想,只不過更先進一點,它是把數據和代碼都封裝在了一起。

(2)生動一點的解釋:
打個比方:烏龜是真實世界的一個對象,那麼我們通常怎麼描述它呢?是不是把它分成兩個部分來說:
1,從靜態特徵來描述:綠色的,四條腿,有外殼,還有個大嘴。
2,動態行爲來描述:會爬,如果你追它,還會跑,它還會咬人,還不松嘴。
在這裏插入圖片描述
如果把人當成一個對象,那大家會在哪幾個方面來描述他呢?
在這裏插入圖片描述

14.2 對象=屬性+方法

大致瞭解了我們平時所說的面向對象編程中的對象是一個什麼概念,我們再來仔細的品品對象到底是個什麼東西。
我們在上面的例子中引用了烏龜的靜態特徵動態行爲來簡單說明了一下什麼是對象,那麼對象=屬性+方法是個什麼意思呢?
一個對象的特徵稱爲“屬性”,一個對象的行爲稱爲“方法”。是不是和上面對烏龜的描述對應起來了?
那我們把“烏龜”寫成代碼,將會是下面這個樣子的:

class Turtle:
	# python中類名約定首字母大寫
	# 特徵的描述稱爲“屬性”,在代碼層次看就是變量。
	color = 'green'
	legs = 4
	mouth = "大嘴"

	# “方法”實際就是函數,通過調用函數來完成某些工作。
	def climb(self):
		print("我正在努力的向前爬。。。")
	def run(self):
		print("我正在努力的向前跑。。。")
	def bite(self):
		print("咬死你,咬死你。。。")
	def sleep(self):
		print("困了,困了,晚安,Zzzz~")
		

以上的這段代碼定義了對象的“屬性”和“方法”。但還並不是一個完整的類,將定義的這些稱爲類(Class)。需要使用類來創建一個真正的對象,這個對象就叫做這個類的實例對象(Instance Object)。

   對象 + 屬性
	|
	|
	類
	|
	|(實例化)
	|
   實例化對象

如果不好理解,那我就給大家舉個例子:
蓋房子,是不是要先有一個圖紙,但只有一個圖紙你能住進去嗎?不能,顯然圖紙只能告訴我們房子是什麼顏色的面積多大,怎樣去建造。另外,一張圖紙是不是能蓋出許許多多一樣的房子。
在這裏插入圖片描述

14.3 self是什麼?

細心的同學可能會發現每一個類的方法裏面都有一個self參數,但是這個self是做什麼用的呢?如果同學們之前接觸過C++,那麼你很容易的可以將其對號入座,python的self其實就是相當於C++的this指針。
我們再做一個形象的比喻,如果說類是“圖紙”,實例對象是“房子”,那麼這個self就相當於每一個房子自己的鑰匙,我們之前說過根據一個圖紙可以蓋出很多相似的房子,但是每個房子自己的鑰匙不一樣,相應的鑰匙只能開對應的房門。
python由同一個類可以生成無數的對象,當一個對象的方法被調用的時候,對象會將自身的引用作爲第一個參數傳給該方法,那麼python就可以知道該操作哪一個對象的方法了。
通過一個例子感受一下:

class Ball:
	def setName(self,name):
		self.name = name
	def kick(self):
		print("我是%s,噢~誰踢我?" % self.name)

a = Ball()
a.setName("足球")
print(a.kick())
--》我是足球,噢~誰踢我?

b = Ball()
b.setName("籃球")
print(b.kick())
--》我是籃球,噢~誰踢我?

現在總結一下,我們這一章節主要講解的就是什麼是對象,以及構成對象的類。那麼什麼是對象呢?
(1)就是包含屬性和方法的一個數據和函數的封裝。
(2)屬性就相當於變量,方法就相當於函數。
(3)類只是構成對象的一張圖紙。
(4)實例對象就是通過圖紙構造的真實的事物。
(5)self相當於打開相應實例對象的鑰匙,指向自身的方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章