qq刷贊網(wǎng)站怎么做的谷歌瀏覽器網(wǎng)頁版入口
類和對象
面向過程——怎么做?
(1)把完成某一需求的所有步驟、從頭到尾,逐步實(shí)現(xiàn)
(2)根據(jù)開發(fā)需求,將某些功能獨(dú)立的代碼塊封裝成一個(gè)又一個(gè)的函數(shù)
(3)最后完成的代碼,就是順序地調(diào)用不同的函數(shù)
面向?qū)ο蟆l來做?
(1)在完成某一需求之前,首先確定職責(zé)——要做的事情(方法)
(2)根據(jù)職責(zé)確定不同的對象,在各個(gè)對象內(nèi)封裝不同的方法(賦予每個(gè)對象不一樣的能力,從而承擔(dān)不一樣的職責(zé))
(3)最后完成代碼,就是順序地讓不同的對象調(diào)用不同的方法
總結(jié):相比較函數(shù)封裝,對象是更大的封裝,不僅將功能獨(dú)立的代碼塊封裝成一個(gè)方法,更將多個(gè)方法封裝到一個(gè)對象中
0-1、類(一張飛機(jī)的設(shè)計(jì)圖紙)
是對具有相同特征和行為的一類事物的統(tǒng)稱,是抽象的,不能直接使用的;可以看作一個(gè)模板,是負(fù)責(zé)創(chuàng)建對象的
特征:屬性
行為:方法
0-2、對象(根據(jù)設(shè)計(jì)圖紙,制造的一輛真實(shí)的飛機(jī))
是由類創(chuàng)建出來的一個(gè)具體存在,是可以直接使用的;
由哪一個(gè)類創(chuàng)建出來的對象,就具有哪一個(gè)類的屬性和方法
0-3、類和對象的關(guān)系
程序開發(fā)中,先有類,再有對象
類只有一個(gè),而對象可以有多個(gè);
類中定義了什么屬性和方法,對象中就有什么屬性和方法;
不同的對象之間屬性的具體值(形參)可以是各不相同的(比如由同一張圖紙創(chuàng)建出來的三輛飛機(jī)顏色可能各不相同)
0-4、類的設(shè)計(jì)
先確定需要哪些類;一個(gè)類需要包含以下三個(gè)元素:
(1)類名:這類事物的名字
大駝峰命名法:每一個(gè)單詞的首字母大寫,單詞與單詞之間無下劃線
(2)屬性:這類事物具有什么樣的特征(常用名詞命名)
對象具有的特征(名詞),通??梢远x為屬性
(3)方法:這類事物具有什么樣的行為(常用動(dòng)詞命名)
對象具有的動(dòng)作(動(dòng)詞),通??梢远x為方法
例子:
面向?qū)ο蟮幕A(chǔ)語法
1-1、 dir()內(nèi)置函數(shù)
在python中,變量、數(shù)據(jù)和函數(shù)都是對象,調(diào)到用dir()函數(shù)可以查看對象內(nèi)的所有屬性和方法
如:dir(demo) 會(huì)返回demo這個(gè)類的所有屬性和方法
其中:方法名 格式的方法是python內(nèi)置的方法/屬性
1-2、定義簡單的類*
在一個(gè)類中封裝多個(gè)方法,這樣通過這個(gè)類創(chuàng)建的對象就可以直接調(diào)用這些方法
(1)定義只包含方法的類
class 類名:def 方法名一(self,參數(shù)列表):passdef 方法名二(self, 參數(shù)列表):pass
(2)創(chuàng)建對象
對象變量 = 類名()
(3)第一個(gè)面向?qū)ο蟮某绦?br /> 例子:小貓愛喝水,小貓愛吃魚
分析:定義一個(gè)貓類;定義兩個(gè)方法(eat、drink);按照需求,不需要定義屬性
class Cat:def eat(self):print("小貓愛吃魚")def drink(self):print("小貓愛喝水")
# 創(chuàng)建貓對象(等號(hào)右邊負(fù)責(zé)創(chuàng)建對象,等號(hào)左邊負(fù)責(zé)對這個(gè)對象進(jìn)行引用)
tom = Cat()
# 調(diào)用貓方法
tom.eat()
tom.drink()
# 返回tom對象是由哪一個(gè)類創(chuàng)建的以及這個(gè)對象在內(nèi)存中的地址
print(tom)
# 返回tom對象的地址(16進(jìn)制)
addr = id(tom)
# 轉(zhuǎn)換為10進(jìn)制
print("%d" % addr)
# 轉(zhuǎn)化為16進(jìn)制
print("%x" % addr)
(4)案例改造-給對象增加屬性
方法:在類外部代碼上直接通過 :對象名.新增屬性名 = 屬性值
這種方法簡單,但不推薦使用,因?yàn)?em>對象的屬性和方法應(yīng)當(dāng)封裝在類的內(nèi)部,而不應(yīng)該在類的外部來添加。
并且lazy_cat的并沒有增加屬性name,說明各個(gè)對象之間是相互獨(dú)立的,對一個(gè)對象進(jìn)行增加屬性的操作并不會(huì)影響其他的對象。
1-3、self是什么
——在類封裝的內(nèi)部,self就表示當(dāng)前調(diào)用方法/屬性的對象自己;
self就是創(chuàng)建的對象本身,哪一個(gè)對象調(diào)用這個(gè)方法,self就是哪一個(gè)對象的引用
1-4、 在類的外部給對象增加屬性的問題
會(huì)出現(xiàn)找不對該屬性的問題,因此對象需要包含哪些屬性,應(yīng)該封裝在類的內(nèi)部!
初始化方法
2-1 、什么是初始化方法
當(dāng)使用類名創(chuàng)建對象時(shí),會(huì)自動(dòng)執(zhí)行以下操作:
(1)創(chuàng)建對象——為對象在內(nèi)存中分配空間
(2)初始化方法(init)——為對象的屬性設(shè)置初始值
init:內(nèi)置的方法,專門用來定義一個(gè)類具有哪些屬性的方法
2-2 、在初始化方法內(nèi)部定義屬性
(1)在__init__方法內(nèi)部使用 self.屬性名 = 屬性的初始值 就可以定義屬性
(2)定義屬性之后,使用該類創(chuàng)建的對象,都會(huì)擁有該屬性
2-3 、__str__方法
在用print輸出對象變量時(shí),能夠打印自定義的內(nèi)容,該方法必須返回一個(gè)字符串:
2- 4、 案例
總結(jié):在對象的方法內(nèi)部,是可以直接訪問對象的屬性的;
同一個(gè)類創(chuàng)建的各個(gè)對象之間是互不干擾的;