時間:2020年1月8日
內(nèi)容:多態(tài)敢伸、類方法、類屬性
多態(tài)、類方法吠架、類屬性
多態(tài)
面向?qū)ο蟮娜筇卣鳎?/p>
- 封裝
- 將屬性和方法書寫到類的里面的操作即為封裝
- 封裝可以為屬性和方法添加私有權(quán)限
- 繼承
- 子類默認(rèn)繼承父類的所有屬性和方法
- 子類可以重寫父類屬性和方法
- 多態(tài)
- 傳入不同的對象,產(chǎn)生不同的結(jié)果
定義:多態(tài)是一種使用對象的方式搂鲫,子類重寫父類方法傍药,調(diào)用不同子類對象的相同父類方法,可以產(chǎn)生不同的執(zhí)行結(jié)果
好處:調(diào)用靈活魂仍,有了多態(tài)拐辽,更容易編寫出通用的代碼,做出通用的編程擦酌,以適應(yīng)需求的不斷變化俱诸!
class Dog(object):
def work(self): # 父類提供統(tǒng)一的方法,哪怕是空方法
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): # 傳入不同的對象赊舶,執(zhí)行不同的代碼睁搭,即不同的work函數(shù)
dog.work()
ad = ArmyDog()
dd = DrugDog()
daqiu = Person()
daqiu.work_with_dog(ad)
daqiu.work_with_dog(dd)
類屬性和實例屬性
設(shè)置和訪問類屬性
- 類屬性就是 類對象 所擁有的屬性,它被 該類的所有實例對象 所共有笼平。
- 類屬性可以使用 類對象 或 實例對象 訪問园骆。
class Dog(object):
tooth = 10
wangcai = Dog()
xiaohei = Dog()
print(Dog.tooth)
print(xiaohei.tooth)
print(wangcai.tooth)
類屬性有點:
- 記錄的某項數(shù)據(jù) 始終保持一致時,則定義類屬性寓调。
- 實例屬性 要求 每個對象 為其 單獨開辟一份內(nèi)存空間 來記錄數(shù)據(jù)锌唾,而 類屬性 為全類所共有,僅占用一份內(nèi)存捶牢,更加節(jié)省內(nèi)存空間鸠珠。
修改類屬性
類屬性只能通過類對象修改,不能通過實例對象修改秋麸。
class Dog(object):
tooth = 10
wangcai = Dog()
xiaohei = Dog()
# 修改類屬性
Dog.tooth = 12
print(Dog.tooth) # 12
print(wangcai.tooth) # 12
print(xiaohei.tooth) # 12
# 不能通過對象修改屬性,如果這樣操作炬太,實則是創(chuàng)建了一個實例屬性
wangcai.tooth = 20
print(Dog.tooth) # 12
print(wangcai.tooth) # 20
print(xiaohei.tooth) # 12
實例屬性
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
類方法和靜態(tài)方法
類方法
- 需要用裝飾器
@classmethod
來標(biāo)識其為類方法灸蟆,對于類方法,第一個參數(shù)必須是類對象亲族,一般以cls
作為第一個參數(shù)炒考。
使用場景
- 當(dāng)方法中 需要使用類對象 (如訪問私有類屬性等)時,定義類方法
- 類方法一般和類屬性配合使用
class Dog(object):
__tooth = 10
@classmethod
def get_tooth(cls):
return cls.__tooth
wangcai = Dog()
result = wangcai.get_tooth()
print(result) # 10
靜態(tài)方法
特點:
- 需要通過裝飾器
@staticmethod
來進行修飾霎迫,靜態(tài)方法既不需要傳遞類對象也不需要傳遞實例對象(形參沒有self/cls)斋枢。 - 靜態(tài)方法 也能夠通過 實例對象 和 類對象 去訪問。
使用場景:
- 當(dāng)方法中 既不需要使用實例對象(如實例對象知给,實例屬性)瓤帚,也不需要使用類對象 (如類屬性描姚、類方法、創(chuàng)建實例等)時戈次,定義靜態(tài)方法
- 取消不需要的參數(shù)傳遞轩勘,有利于 減少不必要的內(nèi)存占用和性能消耗
class Dog(object):
@staticmethod
def info_print():
print('這是一個狗類,用于創(chuàng)建狗實例....')
wangcai = Dog()
# 靜態(tài)方法既可以使用對象訪問又可以使用類訪問
wangcai.info_print()
Dog.info_print()
總結(jié)
- 面向?qū)ο笕筇匦?
- 封裝
- 繼承
- 多態(tài)
- 類屬性
- 歸屬于類對象的屬性怯邪,所有對象共有的屬性
- 實例屬性
- 類方法
@classmethod
def xx():
代碼
- 靜態(tài)方法
@staticmethod
def xx():
代碼