Python之?向對象其它

2022-12-20 15:12:00 來源:51CTO博客


【資料圖】

一、?向對象三?特性

1、封裝將屬性和?法書寫到類的??的操作即為封裝封裝可以為屬性和?法添加私有權限2、繼承?類默認繼承?類的所有屬性和?法?類可以重寫?類屬性和?法3、多態傳?不同的對象,產?不同的結果

二、多態

1、了解多態

多態指的是?類事物有多種形態,(?個抽象類有多個?類,因?多態的概念依賴于繼承)。定義:多態是?種使?對象的?式,?類重寫?類?法,調?不同?類對象的相同?類?法,可以產?不同的執?結果好處:調?靈活,有了多態,更容易編寫出通?的代碼,做出通?的編程,以適應需求的不斷變化!實現步驟:    定義?類,并提供公共?法    定義?類,并重寫?類?法    傳遞?類對象給調?者,可以看到不同?類執?效果不同

2、體驗多態

class Dog(object): def work(self): # ?類提供統?的?法,哪怕是空?法   print("指哪打哪...")class ArmyDog(Dog): # 繼承Dog類 def work(self): # ?類重寫?類同名?法   print("追擊敵?...")class DrugDog(Dog): def work(self):   print("追查毒品...")class Person(object): def work_with_dog(self, dog): # 傳?不同的對象,執?不同的代碼,即不同的work函數   dog.work()   ad = ArmyDog()dd = DrugDog()daqiu = Person()daqiu.work_with_dog(ad)daqiu.work_with_dog(dd)

三、類屬性和實例屬性

1、類屬性

類屬性就是 類對象 所擁有的屬性,它被 該類的所有實例對象 所共有。類屬性可以使? 類對象 或 實例對象 訪問。class Dog(object): tooth = 10wangcai = Dog()xiaohei = Dog()print(Dog.tooth) # 10print(wangcai.tooth) # 10print(xiaohei.tooth) # 10類屬性的優點類的實例 記錄的某項數據 始終保持?致時,則定義類屬性。實例屬性 要求 每個對象 為其 單獨開辟?份內存空間 來記錄數據,? 類屬性 為全類所共有,僅占??份內存,更加節省內存空間

2、修改類屬性

類屬性只能通過類對象修改,不能通過實例對象修改,如果通過實例對象修改類屬性,表示的是創建了?個實例屬性。class Dog(object): tooth = 10wangcai = Dog()xiaohei = Dog()# 修改類屬性Dog.tooth = 12print(Dog.tooth) # 12print(wangcai.tooth) # 12print(xiaohei.tooth) # 12# 不能通過對象修改屬性,如果這樣操作,實則是創建了?個實例屬性wangcai.tooth = 20print(Dog.tooth) # 12print(wangcai.tooth) # 20print(xiaohei.tooth) # 12

3、實例屬性

class Dog(object): def __init__(self):   self.age = 5 def info_print(self):   print(self.age)wangcai = Dog()print(wangcai.age) # 5# print(Dog.age) # 報錯:實例屬性不能通過類訪問wangcai.info_print() # 5

四、類?法和靜態?法

1、類?法

第?個形參是類對象的?法需要?裝飾器 @classmethod 來標識其為類?法,對于類?法,第?個參數必須是類對象,?般以cls 作為第?個參數。

2、類?法使?場景

當?法中 需要使?類對象 (如訪問私有類屬性等)時,定義類?法類?法?般和類屬性配合使?class Dog(object): __tooth = 10 @classmethod def get_tooth(cls):   return cls.__tooth   wangcai = Dog()result = wangcai.get_tooth()print(result) # 10

3、靜態?法

需要通過裝飾器 @staticmethod 來進?修飾,靜態?法既不需要傳遞類對象也不需要傳遞實例對象(形參沒有self/cls)。靜態?法 也能夠通過 實例對象 和 類對象 去訪問。

4、靜態?法使?場景

當?法中 既不需要使?實例對象(如實例對象,實例屬性),也不需要使?類對象 (如類屬性、類?法、創建實例等)時,定義靜態?法取消不需要的參數傳遞,有利于減少不必要的內存占?和性能消耗class Dog(object): @staticmethod def info_print():   print("這是?個狗類,?于創建狗實例....")   wangcai = Dog()# 靜態?法既可以使?對象訪問?可以使?類訪問wangcai.info_print()Dog.info_print()

標簽: 修改屬性 指哪打哪

上一篇:每日消息!構建一個應用程序,用于在基于內存的數據庫中存儲 POJO(普通舊 Java 對象)
下一篇:全球快資訊:Python之?向對象-繼承二