找到對應(yīng)的個體完成對應(yīng)的任務(wù)
1.類
????定義:一系列事物的統(tǒng)稱,同類事務(wù)必定有相同的特征,如:狀態(tài)(成員變量),行為(成員方法)...(抽象)
????1.1定義類的格式:
? ? ? ? 格式1:
? ? ? ? ? ? class 類名:
? ? ? ? ? ? ? ? pass
? ? ????格式2:
? ? ? ????? class 類名:
? ? ? ????? ? ? 屬性
? ????? 命名規(guī)則:大駝峰
? ? 1.2成員變量
? ? ? ?1.2.1 定義格式一(常用):
????????? ? class 類名:
? ? ? ????????? def __init__(self):
????????? ? ? ? self.變量名 = 值
????????? ? ? ?self.變量名 = None
? ? ? ? ? ? 調(diào)用格式:
????????? ? ????取值:對象名.變量名
????????? ? ????賦值:對象名.變量名 = 值
? ? ? ? 1.2.2定義格式二(不常用,在使用對象時候直接給特有變量賦值)
? ??????????對象名.變量名(類中沒有出現(xiàn)的,這個對象特有的變量名) = 值
? ??????????調(diào)用同上
? ? ? ? ? ? 注意:
????????????????1.如果變量名不存在則視為定義變量
? ??????????????2.如果變量名存在視為調(diào)用變量
? ? 1.3?成員方法:?
? ? ? ? 1.3.1定義格式一(常用)
? ?????????? def 方法名(self):
? ? ? ? ? ? ?????方法體
? ??????????調(diào)用格式一:
? ??????????????對象名.方法名()
? ? ? ? ? ? 注意:self僅在聲明時占位,無需傳遞具體參數(shù)
? ? ? ? 1.3.2定義格式二:
? ?????????? def 方法名(self,形參1....)
? ??????????????方法體
? ? ? ? ? ? 調(diào)用格式二:
? ??????????????對象名.方法名(實參1....)
? ? 1.4init方法與魔術(shù)方法:
? ? ? ? __init__()方法在對象創(chuàng)建時被運行,無需手動調(diào)用
? ? ? ? 魔術(shù)方法:對于程序中聲明,定義的方法在特定時機自動執(zhí)行的方法叫做魔術(shù)方法
????????????方法名前面和后面各有兩個_
? ??????__str__方法:在使用print()函數(shù)打印輸出對象到屏幕是被運行,,無需手動調(diào)用,也屬于魔術(shù)方法
? ??????????定義格式:
? ?????????????? def __str__(self):
? ?????????????????????? return 打印對象時顯示的信息
? ? 1.5成員方法調(diào)用成員
? ??????成員方法調(diào)用成員變量"self.變量名"
? ? ? ? 注意:慎重調(diào)用獨有變量,當創(chuàng)建該對象沒有定義此獨有變量時會報錯
? ??????成員方法調(diào)用成員方法"self.方法名()"
2.對象
? ? 具體的事務(wù)
? ? 創(chuàng)建對象:變量名 = 類名()
3.封裝:
? ? 3.1私有:對成員私有化可以保護對象直接訪問內(nèi)部成員
? ??????私有屬性定義格式: self.__屬性名 = 值
? ??????私有方法定義格式:
? ?????????? def __方法名(self):
? ? ? ? ? ? ? ? ? 方法體
? ? 3.2標準定義格式:
? ? ? ? 3.2.1.對受保護的變量進行私有設(shè)置
? ? ? ? ????self.__變量名 = 值
? ? ? ? 3.2.2.對外提供訪問器:
? ?????????? 訪問器(get方法)
? ?????????????? def get_變量名(self):
? ? ? ? ? ? ? ? ?????? return self.__變量名
? ? ? ? ? ?對外提供修改器:
? ? ? ? ? ? ??修改器(set方法)
? ? ? ? ? ? ??def set_變量名(self,值):
? ? ? ? ? ? ??????self.__變量名 = 值
? ? 3.3init傳參
????????格式:
???????????? def __init__(self,形參列表):
? ? ? ? ? ? ? ? ?self.__屬性名1 = 形參1
? ? ? ? ? ? ? ? ?self.__屬性名2 = 形參2
? ? ? ? ? ? ? ? ? ? ......
? ? ? ? 創(chuàng)建:
? ??????????變量名 = 類名(self, 值1,值2......)
? ? 3.4類變量:直接寫到類的下面
? ??????定義格式:
????????? ? class 類名:
????????? ? ? ? 變量名 = 值
? ??????調(diào)用格式:
? ??????????賦值:類名.變量名 = 值
? ??????????????只能通過此方法修改值,不能夠通過"對象名.變量名 = 值"來修改
? ?????????? 取值:類名.變量名(推薦)
? ? ? ? ? ? ? ? ? ? ?對象名.變量名(不推薦)
????????注意:
????????????1.類中成員變量根據(jù)對象不同會發(fā)生改變,叫做實例變量
????????????2.不會發(fā)生改變的叫類變量
????????????????類變量歸屬類,實例變量歸屬對象實例
? ? 3.5類方法:
? ? ? ? 定義格式:
????????? ? class 類名:
????????? ? ? ? @classmethod
? ? ? ? ? ? ? ? ?def 方法名(cls,形參列表)
? ? ? ? ? ? ? ? ? ? ? 方法體
? ??????調(diào)用格式:
????????? ? 類名.方法名(實參列表)? (推薦)
????????? ? 對象名.方法名(實參列表)? (不推薦)
? ??????注意:
? ? ????1.類方法中不允許使用實例方法和實例變量
????? ? 2.實例方法中可以使用類變量和類方法
? ? 3.6靜態(tài)方法:
? ??????定義格式:
????????? ? class 類名:
????????? ? ? ? @staticmethod
????? ? ? ? ? ? def 方法名(形參列表)
????? ? ? ? ? ? ? ? 方法體
? ?????調(diào)用格式:
????????? ? 類名.方法名(實參列表)?
????????? ? 對象名.方法名(實參列表)
? ??????注意:靜態(tài)方法與類無關(guān),通常轉(zhuǎn)換成函數(shù)使用
????3.7變量名稱總結(jié):
? ??????全局變量:直接寫在文件中的變量或在函數(shù)中用global修飾的變量 5
? ??????局部變量:函數(shù)中沒有用global的的變量,類的方法中沒有帶有self.的變量 2
? ??????公有變量:在類的方法中定義的帶有self.的變量 1
? ??????獨有變量:沒有在類中定義,在類的外邊使用某個對象時候定義的變量 5
? ??????私有變量:在類中變量名稱前面帶有兩個_,只能在類中使用 3
? ??????類變量:直接寫到類的下面 4
? ??????成員變量:共有變量
????????對象變量:對象的xxx變量
????????對象屬性:對象的xxx屬性
? ? 3.8方法名稱總結(jié):
? ??????方法:def 修飾的都是方法 實際叫的時候不是init方法 不是類方法,不是靜態(tài)方法,就普通方法(成員方法,實例方法)
? ??????類方法:方法上面帶有@classmethod
? ??????靜態(tài)方法:方法上帶有@staticmethod
? ??????函數(shù):定義在類外邊的
? ? ? ? init方法也可以叫做構(gòu)造方法 ?
????3.9對象名稱總結(jié):
? ? ? ? 對象,實例
4.繼承
? ? 4.1A繼承B,A是子類,B是父類
? ? 4.2定義格式
? ??????class 類名(父類名):
????? ? ? ? pass
? ? 4.3注意:
????? ? 1.子類可以添加父類沒有的成員
????? ? 2.父類私有成員不能被繼承
? ? 4.4查看某類繼承自誰:類名.__mro__
? ? 4.5所有類的父類:object
? ? 4.6重寫:
? ??????修改父類方法中的功能
? ??????子類調(diào)用父類的方法:
? ??????????格式1:父類.方法名(對象)
? ??????????格式2:super(本類名,對象).方法名()
? ??????????格式3:super().方法名() (推薦)
? ? 4.7多繼承
? ??????定義格式:
????????? ? class 類名(父類1,父類2.....)
????????? ? ? ? pass
? ? ? ? 注意:super().方法名()執(zhí)行父類1的方法
? ? 4.8多態(tài):一個對象可以干多種事情,需要有繼承
? ? 4.9鴨子類型:對象在語法上滿足調(diào)用關(guān)系,實際不具有對應(yīng)的調(diào)用形態(tài),則該對象為鴨子類型
? ??
? ??
? ? ? ? ? ? ?