面向過程/對象
舉個栗子
面向過程:按照邏輯業(yè)務(wù),從上到下寫代碼
比如說現(xiàn)在開學(xué)了學(xué)生們要進行自我介紹么夫,寫一個程序去介紹者冤,根據(jù)學(xué)生的信息然后最后定義一個過程來完成這個自我介紹的任務(wù);再比如說档痪,殺龍涉枫,那首先我們要找殺龍的武器,誰去殺龍腐螟,殺龍的過程要怎么殺愿汰,最后完成殺龍的任務(wù)。這是都是面向過程乐纸,面向過程的時候你整個過程都得設(shè)計清楚衬廷,不能有一個過程有出錯,不然程序就無法運行下去汽绢。
面向?qū)ο螅簩?shù)據(jù)和函數(shù)綁在一起吗跋,進行封裝,更快的開發(fā)程序,減少了重復(fù)代碼的重復(fù)書寫過程跌宛。
面向?qū)ο缶褪切锼危F(xiàn)在要自我介紹,你叫同學(xué)自己站起來自我介紹就行秩冈,你也不用給他規(guī)定模板怎么介紹本缠,他自己介紹就可以。殺龍也不用自己想著怎么殺入问,你要想的就是誰能殺龍讓他去殺丹锹,完成這個殺龍的任務(wù)就行。也就是面向哪個對象芬失。
面向?qū)ο蠛兔嫦蜻^程僅僅是一種解決問題的思路楣黍,沒有絕對的概念去區(qū)分這個代碼是面向?qū)ο筮€是過程。
對象→類→屬性/方法
日常生活中我們把相近的東西分為一類(class)棱烂,比如鳥類租漂,那一只烏鴉/一只麻雀/一只鴕鳥等等的就是里面的個體,計算機里稱為對象颊糜,一個類別下有很多對象哩治。鳥類有羽毛,繁衍方式是下蛋衬鱼,這是鳥類的屬性业筏。除了用屬性來分類,我們也可以用方法來分類鸟赫。鳥會飛蒜胖,會移動,這是鳥的行為抛蚤,計算機里稱為方法(method)台谢。方法在類的內(nèi)部定義函數(shù)。
類(Class)由3部分構(gòu)成
類的名稱:類名
類的屬性:特征
類的方法:類能進行的操作行為
1.定義一個類的方法是
class 類名:
類名的第一個字母通常大小寫
2.定義類的方法
def 屬性名(self,屬性值)
記得一定要先self!!!
self參數(shù)是為了在方法內(nèi)部引用對象自身岁经,方法的第一個參數(shù)必須位self
3.創(chuàng)建一個對象的方法是
類名()
4.給對象添加屬性的方法是
對象.屬性名() = 值
5.引用對象屬性的兩種方法
(1)對象.屬性
(2)定義一個方法朋沮,這個方法中使用self.屬性
栗子
python提供了初始化對象的方法,一系列特殊方法稱為魔法方法(magic method),方法名為前后兩個下劃線缀壤,比如__init__()/__add__()/__dict__()
__init__的方法:在每次創(chuàng)建對象時自動調(diào)用
self參數(shù)還能在一個方法內(nèi)部調(diào)用同一類的其它方法
類別本身還可以細(xì)分成子類樊拓,我們通過繼承表達上述概念
子類可以繼承父類的屬性,在子類添加父類不存在的屬性诉位,從而增強子類的功能骑脱。子類還可以進行屬性覆蓋,在子類替換父類已經(jīng)存在的屬性。
蘋果會調(diào)用水果的屬性而不是食物的屬性
但有時子類是父類的拓展苍糠,這時就可以用super關(guān)鍵字在子類中調(diào)用父類中覆蓋的方法
運算符
__add__():將兩個對象進行加法運算
__sub__():減法操作
__getitem__():調(diào)用[]方法
__setitem__():替換元素
__delitem__():刪除元素
__len__():元素總數(shù)
__abs__():絕對值
__int__():取整數(shù)
__mul__():乘法
__dict__():鍵為屬性名
propetry()特性
內(nèi)置函數(shù)propetry()特性是特殊的屬性,propetry()最多可以加載四個參數(shù)摸吠。前三個參數(shù)為函數(shù)煤蚌,分別用于設(shè)置獲取/修改/刪除屬性酌媒,最后一個參數(shù)為特性的文檔,可以為一個字符串起說明作用蚊锹。
__getattr__()方法
__getattr__(self,name)?來查詢即生成的屬性,只能用來查詢不在__dict__中的屬性稚瘾。__getattribute__()可以用來查詢?nèi)我鈱傩?/p>
__setattr__(self,name,value) 修改屬性
__delattr__(self,name) 刪除屬性
__descriptor__?
動態(tài)類型
1.對象名是對對象的引用牡昆,變量名可以隨時更改指向,變量類型也可以在程序中改變摊欠,python是動態(tài)語言
(1)內(nèi)置函數(shù)id(),能夠查詢到引用指向的是哪個對象丢烘,返回對象的編號
(2)用is運算判斷兩個引用是否指向同一個對象
2.可變對象和不可變對象
(1)不可變對象
整數(shù)/浮點數(shù)/字符串些椒,不能改變對象本身播瞳,賦值最多只能改變對象的指向
(2)可變對象
字典/列表自身對象可以發(fā)生改變
3.從動態(tài)類型看參數(shù)傳遞
引用計數(shù)
getrecount()創(chuàng)建臨時引用,所得結(jié)果會比期望多1