目錄
- 面向?qū)ο缶幊探榻B
- 類與對象介紹
- 私有屬性與私有方法
面向?qū)ο缶幊?/h1>
1. 面向?qū)ο缶幊探榻B
- 面向?qū)ο缶幊蹋篛bject Oriented Programming帘不,簡稱OOP,是一種程序設(shè)計思想储狭。
- 需要注意的是,與之對應(yīng)的是面向過程編程思想辽狈。實際上,能夠使用面向?qū)ο缶幊趟枷雽崿F(xiàn)的程序驮配,也都能通過面向過程完成着茸。只是看哪種思想更適合當(dāng)前開發(fā)需求。
- 面向過程與面向?qū)ο髤^(qū)別
面向過程:根據(jù)業(yè)務(wù)邏輯從上到下寫代碼
面向?qū)ο螅簩?shù)據(jù)與函數(shù)綁定到一起涮阔,進行封裝。減少重復(fù)代碼的重寫過程
- 面向?qū)ο蟾拍罴靶g(shù)語
- 類(Class): 用來描述具有相同屬性和方法的對象的集合掰邢。它定義了該集合中每個對象所共有的屬性和方法伟阔。其中的對象被稱作類的實例。
- 對象:也稱實例皱炉。通過類定義的初始化方法,賦予具體的值奏夫,成為一個"有血有肉的實體"历筝。
- 實例化:創(chuàng)建類的實例的過程或操作。
- 實例變量:定義在實例中的變量麻削,只作用于當(dāng)前實例春弥。
- 類變量:類變量是所有實例公有的變量。類變量定義在類中匿沛,但在方法體之外。
- 數(shù)據(jù)成員:類變量鳖孤、實例變量、方法苏揣、類方法、靜態(tài)方法和屬性等的統(tǒng)稱框沟。
- 方法:類中定義的函數(shù)增炭。
- 靜態(tài)方法:不需要實例化就可以由類執(zhí)行的方法
- 類方法:類方法是將類本身作為對象進行操作的方法。
- 方法重寫:如果從父類繼承的方法不能滿足子類的需求弟跑,可以對父類的方法進行改寫防症,這個過程也稱override。
- 封裝:將內(nèi)部實現(xiàn)包裹起來饲嗽,對外透明奈嘿,提供api接口進行調(diào)用的機制
- 繼承:即一個派生類(derived class)繼承父類(base class)的變量和方法。
- 多態(tài):根據(jù)對象類型的不同以不同的方式進行處理裙犹。
2. 類與對象介紹
- 類
類是抽象的概念,僅僅是模板袄膏。用來描述具有相同屬性和方法的對象的集合掺冠。比如:"人"是一個類。
- 對象
某一個具體事物的存在 ,在現(xiàn)實世界中可以是看得見摸得著的斥黑。 比如:"胡歌"就是一個對象眉厨。
-
類與對象的關(guān)系
- 練習(xí):
Q:下面哪些是類,哪些是對象缨叫?
? 汽車
? 奔馳大G550
? 水果
? 紅富士
面向過程:根據(jù)業(yè)務(wù)邏輯從上到下寫代碼
面向?qū)ο螅簩?shù)據(jù)與函數(shù)綁定到一起涮阔,進行封裝。減少重復(fù)代碼的重寫過程
- 類(Class): 用來描述具有相同屬性和方法的對象的集合掰邢。它定義了該集合中每個對象所共有的屬性和方法伟阔。其中的對象被稱作類的實例。
- 對象:也稱實例皱炉。通過類定義的初始化方法,賦予具體的值奏夫,成為一個"有血有肉的實體"历筝。
- 實例化:創(chuàng)建類的實例的過程或操作。
- 實例變量:定義在實例中的變量麻削,只作用于當(dāng)前實例春弥。
- 類變量:類變量是所有實例公有的變量。類變量定義在類中匿沛,但在方法體之外。
- 數(shù)據(jù)成員:類變量鳖孤、實例變量、方法苏揣、類方法、靜態(tài)方法和屬性等的統(tǒng)稱框沟。
- 方法:類中定義的函數(shù)增炭。
- 靜態(tài)方法:不需要實例化就可以由類執(zhí)行的方法
- 類方法:類方法是將類本身作為對象進行操作的方法。
- 方法重寫:如果從父類繼承的方法不能滿足子類的需求弟跑,可以對父類的方法進行改寫防症,這個過程也稱override。
- 封裝:將內(nèi)部實現(xiàn)包裹起來饲嗽,對外透明奈嘿,提供api接口進行調(diào)用的機制
- 繼承:即一個派生類(derived class)繼承父類(base class)的變量和方法。
- 多態(tài):根據(jù)對象類型的不同以不同的方式進行處理裙犹。
類是抽象的概念,僅僅是模板袄膏。用來描述具有相同屬性和方法的對象的集合掺冠。比如:"人"是一個類。
某一個具體事物的存在 ,在現(xiàn)實世界中可以是看得見摸得著的斥黑。 比如:"胡歌"就是一個對象眉厨。
類與對象的關(guān)系
Q:下面哪些是類,哪些是對象缨叫?
? 汽車
? 奔馳大G550
? 水果
? 紅富士
A:都是類
- 類的構(gòu)成
類由3個部分構(gòu)成
? 類的名稱:類名
? 類的屬性:一組數(shù)據(jù)
? 類的方法:允許對類進行操作的方法
注意:類名通常采用駝峰式命名方式,盡量讓字面意思體現(xiàn)出類的作用耻姥。 - 類的定義
Python使用class關(guān)鍵字來定義類,其基本結(jié)構(gòu)如下:
class 類名:
pass
- 創(chuàng)建對象
python中蒸健,可以根據(jù)已經(jīng)定義的類去創(chuàng)建出一個個對象
創(chuàng)建對象的格式為 :
對象名 = 類名()
- 練習(xí)
? 創(chuàng)建類:學(xué)生類
? 創(chuàng)建對象:張三
? 在類中定義方法輸出:張三學(xué)習(xí)Python
class Students:
def study_python(self):
print("張三學(xué)習(xí)python")
zs = Students()
zs.study_python()
- 總結(jié):
# 定義
class 類名:
def 方法名(self,參數(shù)): # 類中函數(shù):稱為方法
pass
# 執(zhí)行
s = 類名() # 創(chuàng)建對象(實例) 整個過程就是實例化
s.方法名(參數(shù)) # 調(diào)用類中方法
- self參數(shù)
在類當(dāng)中定義方法時婉商,會發(fā)現(xiàn)系統(tǒng)幫我們自動創(chuàng)建了self參數(shù),并且在調(diào)用對象的該方法時盯捌,也無需傳入self參數(shù)蘑秽。那這個self是什么?
實際上肠牲,我們需要明確self的兩個概念
? self本身是形參
? self就是對象本身 -
init()方法
init()方法稱為初始化方法缀雳,也可稱為構(gòu)造方法渡嚣。在創(chuàng)建對象時肥印,會自動執(zhí)行該方法,為對象的屬性設(shè)置初始值裤唠。- init()方法莹痢,在創(chuàng)建一個對象時默認被調(diào)用,不需要手動調(diào)用
- init(self)中航瞭,默認有1個參數(shù)名字為self坦辟,如果在創(chuàng)建對象時傳遞了2個實參,那么init(self)中出了self作為第一個形參外還需要2個形參锉走,例如init(self,x,y)
- init(self)中的self參數(shù)藕届,不需要開發(fā)者傳遞亭饵,python解釋器會自動把當(dāng)前的對象引用傳遞進去
-
str()方法
如果在開發(fā)中,希望打印輸出對象變量時踏兜,能夠打印自定義的內(nèi)容八秃。就可以使用str()方法,將自定義內(nèi)容通過return關(guān)鍵字返回昔驱。- 注意:返回值必須是字符串。
3. 私有屬性與私有方法
- 應(yīng)用場景
在以上的學(xué)習(xí)中纳本,我們了解到定義在init()構(gòu)造方法初始化對象的屬性是可以在類的外部訪問到萌衬。那在實際開發(fā)中它抱,對象的某些屬性或者方法,可能只希望在對象的內(nèi)部使用混移,這時侮穿,我們就可以使用私有屬性和私有方法。 - 私有屬性
私有屬性:就是對象不希望公開的屬性
定義方式:在屬性名前面增加兩個下劃線(例如:__name) - 練習(xí)
? 定義類為:"人"類
? 創(chuàng)建對象:rose
? 初始化對象屬性:name與age
? 要求:age不能在類的外部訪問
class Person:
def __init__(self):
self.name = "肉絲"
self.__age = 20 # 私有屬性定義
rose = Person()
print(rose.name) # "肉絲"
print(rose.__age) # AttributeError: 'Person' object has no attribute '__age'
- 那如果有需求一定要在類的外部訪問到對象的私有屬性時回铛,我們可以使用如下步驟
? 可以通過類的內(nèi)部的方法訪問私有屬性
? 通過類的內(nèi)部方法將私有屬性返回出去
? 在類的外部調(diào)用該方法并且接收就可
class Person:
def __init__(self):
self.name = "肉絲"
self.__age = 20 # 私有屬性定義
def test(self):
# print(self.__age) # 在類的內(nèi)部 可以訪問 私有屬性
return self.__age
rose = Person()
rose_age = rose.test()
print(rose_age,'test') # 20 test
- 私有方法
私有方法:就是對象不希望公開的方法
定義方式:在方法名前面增加兩個下劃線(例如:__test)- 注意
- 在python中克锣,并沒有真正意義上的私有,只有偽私有验残。當(dāng)我們在訪問時,以對象.類名_私有屬性名稱即可訪問您没,私有方法同。
- 但是同樣也需要注意的是氨鹏,在實際開發(fā)中喻犁,不要通過該方式訪問對象的私有屬性或者私有方法。
- 注意