1.面向?qū)ο蟮乃枷雰?yōu)點(diǎn) 優(yōu)點(diǎn): 簡(jiǎn)化代碼 ,構(gòu)建公共模板 ,擴(kuò)展性強(qiáng) 思想: 類作為模板 ,對(duì)象通過模板實(shí)例化對(duì)象 ,對(duì)象去做事 ,抽象將顯示存在的事物使用代碼體現(xiàn)
2.三大特性 封裝(狹義) : 對(duì)屬性的封裝 ,對(duì)方法的封裝 繼承 1.子類擁有父類除私有內(nèi)容外所有 2.對(duì)象通過子類-父類-...找到自己所需要的屬性方法 3.py3默認(rèn)繼承object是新式類 , 使用c3算法 ,print(類型.mro()) 判斷類名,查看多繼承的繼承順序 4.super().方法 ,可以調(diào)用父類的同名方法 class Base: def __init__(self): print('BASE') class A(Base): def __init__(self): super().__init__() print('A') class B(Base): def __init__(self): super().__init__() print('B') class C(A, B): def __init__(self): super().__init__() print('C') C() print(C.mro()) # 按照這個(gè)算法順序,確定某個(gè)類的繼承順序 多態(tài)
3.成員 屬性 (__dict__查看) 對(duì)象的屬性 類的屬性 方法 (dir()查看) 普通方法 類方法 :@classmethod 靜態(tài)方法 :@staticmethod 放在類中的普通函數(shù) 屬性 (方法偽裝屬性) 很多方法執(zhí)行后獲得的是一個(gè)結(jié)果 ,不像一個(gè)動(dòng)作 @property #偽裝屬性 @方法名.setter #根據(jù)傳入的values ,來(lái)改變屬性的返回值 私有成員 僅內(nèi)部可以調(diào)用的變量或方法 ,私有屬性,私有類方法,私有對(duì)象屬性 self與cls self形參是對(duì)象本身 ,當(dāng)對(duì)象實(shí)例化之后 ,調(diào)用時(shí)將對(duì)象的內(nèi)存地址給self cls形參是類本身 class Person: local = '地球' # 私有類屬性 __character__ = '積極向上' def __init__(self, name, ad, hp, character): self.name = name self.ad = ad self.hp = hp # 私有對(duì)象屬性 self.__character__ = character # 私有類方法 def __local__(cls): print(cls.__character__) # 類方法 @classmethod def Dict(cls): return cls.__dict__ # 靜態(tài)方法 @staticmethod def Sum(n): return n + 2 # 屬性Info @property def Info(self): return '{}-{}-{}'.format(self.name, self.ad, self.hp) # 修改屬性Info @Info.setter def Info(self, values): if values < 100: self.ad = values print(Person.__character__) print(Person.Dict()) print(Person.Sum(2)) obj1 = Person('lucy', 10, 50, '積極向左') print(obj1.Info) obj1.Info = 99 print(obj1.Info)
4.對(duì)象的行為 實(shí)例化對(duì)象 1.__new__方法在內(nèi)存開辟空間創(chuàng)建對(duì)象 2.執(zhí)行__init__方法初始化對(duì)象 對(duì)象調(diào)用屬性與方法的順序 優(yōu)先在內(nèi)存中尋找-->對(duì)象內(nèi)部封裝-->類-->父類
5.類與類之間的關(guān)系 依賴關(guān)系 : 相互依存性較低 ,就是一個(gè)類中需要執(zhí)行動(dòng)作時(shí) ,需要其他類中的方法屬性去幫助完成 ,一般通過參數(shù)將對(duì)象進(jìn)行調(diào)用
class Eat:
關(guān)聯(lián)關(guān)系 : 兩種事物必須是互相關(guān)聯(lián)的. 但是在某些特殊情況下是可以更改和更換的.
class Country: 繼承關(guān)系 :就是繼承父類非私有屬性方法 ,self會(huì)先從對(duì)象中尋找方法屬性 ,當(dāng)沒有的時(shí)候會(huì)去父類中尋找
6.接口類(約束抽象) 接口類是繼承的一個(gè)用法 ,繼承可以讓子類擁有父類的代碼 ,防止代碼重復(fù) ,還可以定義一個(gè)接口類 ,僅定義接口名(函數(shù)名) ,由子類繼承去寫接口中的功能 接口類抽象規(guī)定了兼容接口 ,是的外部調(diào)用者不需要關(guān)心細(xì)節(jié) # 接口類 ,約束子類必須擁有的方法,及參數(shù)
7.反射 反射是通過字符串去操作對(duì)象或者類或者是模塊 ,第一參數(shù)是(對(duì)象或者類或者是模塊) 常用: getter() getattr(參數(shù)1 ,'字符串') #獲取內(nèi)存地址 hasattr() hasattr(參數(shù)1 ,'字符串') #判斷變量是否存在 import m1 class A: local = 'Beijing' def __init__(self): pass def datetime1(self): print('time') a1 = A() # 通過反射從對(duì)象獲取屬性 b = getattr(a1, 'local') # 通過反射從類中拿屬性 c = getattr(A, 'local') # 通過反射從對(duì)象中拿方法 d = getattr(a1, 'datetime1') # 通過反射從模塊中拿到類B B = getattr(m1,'B') print(hasattr(m1,'B')) e = B()
8.特殊雙下方法 __str__與__repr__ ,不太理解,但是都可以把對(duì)象的內(nèi)存地址轉(zhuǎn)為可讀字符串 __call__方法 ,當(dāng)對(duì)象 + () 的情況就會(huì)執(zhí)行 __call__方法 class A: __new__方法 ,new方法是object基類中的方法 ,是構(gòu)造方法 ,開辟內(nèi)存 ,創(chuàng)建對(duì)象 class A: def __new__(cls, *args, **kwargs): print('1') cls.name = 'LOP' return object.__new__(cls) # 引用obeject的c語(yǔ)言創(chuàng)建對(duì)象功能 def __init__(self): print('2') # 第一步執(zhí)行__new__方法中的內(nèi)容,將返回值給對(duì)象名a1 # 第二步執(zhí)行__init__初始化對(duì)象 a1 = A() print(a1.name) class A:
|
|