面向?qū)ο骭初識

目錄

  1. 面向?qū)ο缶幊探榻B
  2. 類與對象介紹
  3. 私有屬性與私有方法

面向?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)系


    類與對象的關(guān)系
  • 練習(xí):
    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ā)中喻犁,不要通過該方式訪問對象的私有屬性或者私有方法。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末还栓,一起剝皮案震驚了整個濱河市传轰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌慨蛙,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件跟匆,死亡現(xiàn)場離奇詭異通砍,居然都是意外死亡,警方通過查閱死者的電腦和手機封孙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門虎忌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人堪藐,你說我怎么就攤上這事挑围。” “怎么了贪惹?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長枫绅。 經(jīng)常有香客問我,道長并淋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任句喷,我火速辦了婚禮兔毙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锡溯。我一直安慰自己哑姚,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布倡蝙。 她就那樣靜靜地躺著绞佩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪征炼。 梳的紋絲不亂的頭發(fā)上躬贡,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天拂玻,我揣著相機與錄音,去河邊找鬼檐蚜。 笑死,一個胖子當(dāng)著我的面吹牛市栗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播填帽,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼褐荷!你這毒婦竟也來了嘹悼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤其监,失蹤者是張志新(化名)和其女友劉穎缀台,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體膛腐,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡哲身,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了怔揩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡商膊,死狀恐怖宠进,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情实幕,我是刑警寧澤堤器,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站整吆,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏表蝙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一昼扛、第九天 我趴在偏房一處隱蔽的房頂上張望欲诺。 院中可真熱鬧,春花似錦扰法、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至伴网,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間沸伏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工毅糟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留澜公,地道東北人。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓蜕青,卻偏偏與公主長得像糊渊,于是被迫代替她去往敵國和親慧脱。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353