1. 面向?qū)ο蟮膬蓚€(gè)特點(diǎn)
1.1. class 類
? class類, 就是對(duì)一類擁有相同屬性的對(duì)象的抽象、藍(lán)圖座硕、原型的集合
? 在類中定義了這些對(duì)象的都具備的屬性(variables(data))、共同的方法
1.2. Object 對(duì)象
? Object對(duì)象即是一個(gè)列經(jīng)過實(shí)例化后產(chǎn)生的一個(gè)實(shí)例, 一個(gè)類在沒有實(shí)例化之前是無法被使用的
2. 面向?qū)ο蟮娜筇匦?/h2>
2.1. 封裝 ( Encapsulation )
? 一個(gè)類, 在創(chuàng)建之后, 內(nèi)部的方法是無法進(jìn)行直接調(diào)用的, 是因?yàn)轭惖姆庋b特性. 類將多個(gè)函數(shù)或其他進(jìn)行封裝, 外部是無法直接對(duì)其進(jìn)行查看的, 只能通過實(shí)例化后才能進(jìn)行調(diào)用
2.2. 繼承 ( Inheritance )
? 一個(gè)類可以派生出子類蝗肪,在這個(gè)父類里定義的屬性斜友、方法自動(dòng)被子類繼承. 子類可以使用父類的方法
2.3. 多態(tài) ( Polymorphism )
? 多態(tài)是面向?qū)ο蟮闹匾匦?簡單點(diǎn)說:“一個(gè)接口朋鞍,多種實(shí)現(xiàn)”屿讽,指一個(gè)基類中派生出了不同的子類毡惜,且每個(gè)子類在繼承了同樣的方法名的同時(shí)又對(duì)父類的方法做了不同的實(shí)現(xiàn)泄鹏,這就是同一種事物表現(xiàn)出的多種形態(tài),
3. 實(shí)例化
3.1. 什么是實(shí)例化
1)把一個(gè)類變成一個(gè)具體對(duì)象的過程叫做 實(shí)例化 ( 初始化 )
2)如果沒有實(shí)例化, 使用完之后就會(huì)被程序釋放掉, 實(shí)例化后則不會(huì)被釋放
3.2. 實(shí)例化做了什么
1)類在沒有實(shí)例化調(diào)用時(shí), 就已經(jīng)被讀到內(nèi)存中了, 但是不會(huì)對(duì)類進(jìn)行語法判斷
2)實(shí)例化過程中就是會(huì)將實(shí)例化后的變量名傳入到類中 (self 就會(huì)為了接收實(shí)例化后的變量名的)
3)在類中自己創(chuàng)建的函數(shù)是不會(huì)重新復(fù)制的, 只有在引用時(shí)才會(huì)到?jīng)]有實(shí)例化的類中調(diào)取該函數(shù)
4)調(diào)取函數(shù)是, 會(huì)將 self 替換為 實(shí)例化時(shí)的變量名
3.3. 如何實(shí)例化
1)由圖中所示萨西, 類的實(shí)例化就是將一個(gè)類做一個(gè)指針摹恰, 指向一個(gè)變量昙篙,這個(gè)過程就是實(shí)例化惯殊, a 就叫做 Dog 類的實(shí)例
4. 類
4.1. 類介紹
其中:
n = "Alex" # 叫類變量
self.name = name # 叫做實(shí)例變量
bulk骤肛,samoye 這里兩個(gè)函數(shù)纳本, 在類中叫做這個(gè)類的方法(功能,動(dòng)態(tài)屬性)
1) 其中實(shí)例變量腋颠,在不同的實(shí)例化中是無法共享的繁成,但是類變量可以。
2) 所以可以說實(shí)例變量的作用域就是實(shí)例本身
3) 實(shí)例變量又叫做靜態(tài)屬性
4) 所以 靜態(tài)屬性就是變量淑玫, 動(dòng)態(tài)屬性就是方法
5) 如果在類中有兩個(gè)變量名相同巾腕,一個(gè)是類變量面睛, 一個(gè)是實(shí)例變量, 那在調(diào)用時(shí)是先找實(shí)例變量尊搬, 如 果 實(shí)例變量中沒有才會(huì)找類變量
6)實(shí)例變量的作用: 用于描述每個(gè)實(shí)例特定的屬性的
7)類變量的作用: 用于提供所有實(shí)例的公用的屬性
8)類變量與實(shí)例變量不同叁鉴,不是每次實(shí)例化都要進(jìn)行讀取與重新賦值的,所以對(duì)于全部相同的數(shù)屬性就可以使用類變量
4.2 對(duì)已經(jīng)實(shí)例化的值進(jìn)行增刪改
所以我們是做的是:
1)在實(shí)例化后修改實(shí)例化是的值的
2)可以在實(shí)例化后 添加一個(gè)新值
3)添加值是對(duì) a 實(shí)例的操作佛寿,對(duì)其他的實(shí)例沒影響
4)也可以刪除已經(jīng)定義好的變量
(使用 del 幌墓, 如 del a.name)
4.3. 更改類變量
1)由圖中可以看到, a.n 改變了狗准,其實(shí) 這個(gè)操作就是克锣, 在 a實(shí)例中加入了一個(gè) n="1_Alex" 的方法,通過這個(gè)來實(shí)現(xiàn)更改的效果腔长,所以對(duì) b 實(shí)例沒有影響
2)響之所以能實(shí)現(xiàn)袭祟, 是因?yàn)榻忉屍髟谧x取白能量是是從內(nèi)到為進(jìn)行讀取的, 也就是從今到遠(yuǎn)進(jìn)行讀取變量的捞附, 如果在類中和全局變量中都有N這個(gè)屬性的話就默認(rèn)調(diào)用類中的不讀取全局的巾乳, 這就是 及近原則
4.4. 直接修改 原類屬性,看 a鸟召、b的變化
1)我對(duì)類本身進(jìn)行操作胆绊,如圖中的 Dog.n = "ABC" , 那么欧募, 這種情況下压状, b 會(huì)修改, 而a 不會(huì)跟继, 因?yàn)?a的變量中就已經(jīng)有了n 不會(huì)去類中找
2)所以只要實(shí)例變量中沒有 n 的就會(huì)去類中找 n 值种冬, n 值就會(huì)發(fā)生改變
4.5. 如果 n 是一個(gè)不會(huì)自動(dòng)復(fù)制的元素哪, 如列表舔糖、元祖等
01_6.png
1)我們從右圖中發(fā)現(xiàn) Dog.n 發(fā)生了改變娱两,這是因?yàn)榱斜恚?字段, 元祖金吗,等屬性屬于不會(huì)自動(dòng)進(jìn)行復(fù)制的元素
2)實(shí)例化后實(shí)例內(nèi)部的 n 是不會(huì)自己生產(chǎn)十兢, 而是指向了 Dog.n 的內(nèi)存地址, 隨意在右圖中摇庙,b.n 與 Dog.n 實(shí)際上是一個(gè)內(nèi)存地址旱物,所以源 Dog 才會(huì)發(fā)生改變
5. 類的特殊方法
5.1. 構(gòu)造函數(shù):(init)
? 作用是在實(shí)例化時(shí) , 做一些類的初始化工作, 如賦予實(shí)例變量跟匆, 實(shí)例在實(shí)例化時(shí)就開始執(zhí)行某些函數(shù)
5.2. 析構(gòu)函數(shù)(del)
01_8.png
1)是在實(shí)例釋放异袄、銷毀的時(shí)候自動(dòng)執(zhí)行的,通常用于一些收尾工作玛臂,如關(guān)閉一些 數(shù)據(jù)庫鏈接烤蜕、打開的臨時(shí)文件(如右圖)。
2)結(jié)束實(shí)例可以使用 del 方法迹冤,但是要保證只有一個(gè)變量指向了這個(gè)實(shí)例讽营, 否則實(shí)例無法釋放。 所以 del 方法刪除的是變量名而不是數(shù)據(jù)泡徙。只要數(shù)據(jù)沒有了變量名就會(huì)被python 當(dāng)做垃圾收回
-
5.3. 私有屬性橱鹏,私有方法(體現(xiàn)了類的封裝)
01_9.png
1)私有屬性:只有類的內(nèi)部才能被調(diào)用的屬性叫做私有屬性(屬性就是變量)
2)私有方法: 只有內(nèi)部才能調(diào)用的方法叫做私有方法(方法就是類內(nèi)部的函數(shù))
3)這兩個(gè)都是在名字前面加上 "__" 雙下劃線