一男翰、如何基于面向?qū)ο蟮乃枷雽懗绦?/p>
通過 字典 也可以實現(xiàn) 面向?qū)ο笏枷?br> 只要能把相關(guān)的數(shù)據(jù)和功能裝到一起,就是面向?qū)ο?br> 所以可以用面向過程的方式囊陡,表達出面向?qū)ο蟮乃枷?/p>
例2:基于對象式的思想進行改寫
def choose(stu_self):
print('%s:%s:%s 正在選課' % (stu_self["stu_name"], stu_self["stu_age"],stu_self["stu_gender"],))
stu_obj = {
"stu_name": "yang",
"stu_age": 18,
"stu_gender": "male",
"choose":choose
}
print(stu_obj["stu_name"])
stu_obj["choose"](stu_obj)
為了簡便性芳绩,python專門有一個語法,實現(xiàn)面向?qū)ο?/p>
把對象中的所有數(shù)據(jù) 放到兩個地方存
①開辟一個內(nèi)存空間盛放 所有對象相同的數(shù)據(jù)撞反;類
②對象自己的空間中妥色,存放 對象自己獨有的數(shù)據(jù);對象
建立好關(guān)聯(lián)遏片,這樣一個對象仍能訪問到屬于自己的所有數(shù)據(jù)
擁有的還是完整的數(shù)據(jù)
取數(shù)據(jù)的時候嘹害,先從對象中找到鳍侣,找不到再從類中找
存在著查找優(yōu)先級
補充內(nèi)容,各個名字的命名規(guī)范:
①變量名吼拥、函數(shù)名
純小寫+下劃線
eg:student_name
②類名
駝峰體倚聚,首字母大寫
eg:Student
③對于縮略詞
全大寫/全小寫
eg:HTML
類體代碼會在類定義階段立即執(zhí)行,然后將產(chǎn)生的名字空間都丟到類的名稱空間
class Student:
# 相同的數(shù)據(jù)
school = "oldboy"
# 相同的功能
def choose(self):
print("正在選課")
# print('====>')
類體里面放的是:
各個對象相同的數(shù)據(jù)
各個對象相同的功能
只要調(diào)用類凿可,就造一個對象的內(nèi)存空間惑折,將這個對象的內(nèi)存空間 與 類的內(nèi)存空間相綁定
------>>>>>
造好了對象之后,就可以造對象自己的數(shù)據(jù)
通過 obj.數(shù)據(jù)名 = value
python底層也是用字典來實現(xiàn)面向?qū)ο蟮?br>
用兩個字典:
一個字典存 類
一個字典存 對象
可以通過對象名.dict 和 類名.dict 查看這兩個字典中的內(nèi)容
二枯跑、初始化方法
實現(xiàn)快速傳參: 可以自定義一個初始化方法
python的類中惨驶,提供l快速傳參的機制:init
init 在當類被調(diào)用時,自動觸發(fā)執(zhí)行
class Student:
# python 內(nèi)置的初始化方法敛助,原理如下
def __init__(obj, x, y, z):
obj.name = x
obj.age = y
obj.gender = z
# return None # 只能返回None
# 如果返回了其他的值粗卜,那么就會和 類返回的對象地址相沖突
# 眾多對象相同的數(shù)據(jù)
name=None
age=None
gender=None
# 眾多對象相同的功能
def choose(self): # self 值得是自己本身
print("正在選課")
調(diào)用類,發(fā)生的3件事:
1纳击、創(chuàng)建一個空對象與類相關(guān)
2续扔、把空對象、"馮瘋子", 18, "female"一起傳給init方法焕数,完成對象的初始化
3纱昧、賦值符號把初始化好的對象的內(nèi)存地址綁定變量名stu_obj1
三、屬性查找
優(yōu)先級: 對象 的字典(內(nèi)存空間)> 類 的字典(內(nèi)存空間)
先從對象的字典里找堡赔,沒有的話识脆,再去類的字典中找
1、類中定義的數(shù)據(jù)是直接共享給所有對象使用的
2善已、類中定義的函數(shù)是綁定給所有對象用的灼捂,綁定給誰就應(yīng)該由哪個對象來調(diào)用
對象.綁定方法()會把對象當作第一個參數(shù)傳入
類.函數(shù)()就是一個函數(shù)的玩法,沒有自動傳參的效果
綁定方法:
類中的方法换团,就是普通的方法
對象使用的類中的方法悉稠,稱為 綁定方法
方法的內(nèi)容一樣,不過地址(這個地址 其實就是一個遙控器啥寇,每個對象都有一個專屬于自己的地址不同的遙控器)不同
每個對象使用的相同內(nèi)容的方法偎球,當時地址不同
綁定方法的特殊之處:
對象用的時候無需另外傳self,傳的都是自己
所以洒扎,類中的方法辑甜,是綁定給對象用的
補充內(nèi)容:
可以通過類名訪問自己的內(nèi)部成員
雖然類中的數(shù)據(jù)成員是屬于自己的,但是都是為對象準備的
所以一般情況下袍冷,也不通過類名訪問自己的內(nèi)部成員