python 面向對象三大特征詳解
一、面向對象三大特征介紹
Python 是面向對象的語言,也支持面向對象編程的三大特性:繼承、封裝(隱藏)、多態。
1、封裝(隱藏)
隱藏對象的屬性和實現細節,隻對外提供必要的方法。
通過“私有屬性、私有方法”的方式,實現“封裝”。Python 追求簡潔的語法
2、繼承
繼承可以讓子類具有父類的特性,提高瞭代碼的重用性。從設計上是一種增量進化,原有父類設計不變的情況下,可以增加新的功能,或者改進已有的算法。
3、多態
多態是指同一個方法調用由於對象不同會產生不同的行為。生活中這樣的例子比比皆是:同樣是休息方法,人不同休息方法不同。張三休息是睡覺,李四休息是玩遊戲,程序員休息是“敲幾行代碼”。
二、繼承
繼承是面向對象程序設計的重要特征,也是實現“代碼復用”的重要手段。
如果一個新類繼承自一個設計好的類,就直接具備瞭已有類的特征,就大大降低瞭工作
難度。已有的類,我們稱為“父類或者基類”,新的類,我們稱為“子類或者派生類”。
1、語法格式
Python 支持多重繼承,一個子類可以繼承多個父類。繼承的語法格式如下:
class 子類類名(父類 1[,父類 2,…]):
類體:如果在類定義中沒有指定父類,則默認父類是 object 類。也就是說,object 是所有類的父類,裡面定義瞭一些所有類共有的默認實現,比如:__new__()。
定義子類時,必須在其構造函數中調用父類的構造函數。調用格式如下:
父類名.__init__(self, 參數列表)
class Person: def __init__(self,name,age): self.name = name self.__age = age def say_age(self): print("年齡是:",self.__age) class Student(Person): def __init__(self,name,age,grade): self.grade = grade Person.__init__(self,name,age) # 構造函數中包含調用父類構造函數。根據需要,不是必須。 子類並不會自動調用父類的__init__(),我 # 們必須顯式的調用它。 if __name__ == '__main__': s=Student('諸葛',18,1) s.say_age()
2、類成員的繼承和重寫
1. 成員繼承:子類繼承瞭父類除構造方法之外的所有成員。
2. 方法重寫:子類可以重新定義父類中的方法,這樣就會覆蓋父類的方法,也稱為“重寫”
class Person: def __init__(self,name,age): self.name = name self.__age = age def say_age(self): print("年齡是:",self.__age) class Student(Person): def __init__(self,name,age,grade): self.grade = grade Person.__init__(self,name,age) def say_age(self): print(self.name,"的年齡是:",self.age) # 構造函數中包含調用父類構造函數。根據需要,不是必須。 子類並不會自動調用父類的__init__(),我 # 們必須顯式的調用它。 if __name__ == '__main__': s=Student('諸葛',18,1) s.say_age()
3、super()獲得父類定義
在子類中,如果想要獲得父類的方法時,我們可以通過 super()來做。
super()代表父類的定義,不是父類對象。
class A: def say(self): print("A: ",self) print("say AAA") class B(A): def say(self): #A.say(self) 調用父類的 say 方法 super().say() #通過 super()調用父類的方法 print("say BBB") if __name__ =="__main__: b = B() b.say()
4、設計模式_工廠模式實現
工廠模式實現瞭創建者和調用者的分離,使用專門的工廠類將選擇實現類、創建對象進行統一的管理和控制。
class CarFactory: def createCar(self,brand): if brand == "1": return one() elif brand == "2": return two() elif brand == '3': return three() else: return "未知品牌,無法創建" class one: pass class two: pass class three: pass factory = CarFactory() c1 = factory.createCar("1") c2 = factory.createCar("2") print(c1) print(c2)
5、設計模式_單例模式實現
單例模式(Singleton Pattern)的核心作用是確保一個類隻有一個實例,並且提供一個訪問該實例的全局訪問點。
單例模式隻生成一個實例對象,減少瞭對系統資源的開銷。當一個對象的產生需要比較多的資源,如讀取配置文件、產生其他依賴對象時,可以產生一個“單例對象”,然後永久駐留內存中,從而極大的降低開銷。
class One: __obj = None # 用於存儲這個單例 __init_flag = True def __new__(cls, *args, **kwargs): # 指的是One這個類裡面的 類屬性 if cls.__obj == None: # object 是類的默認父類 cls.__obj = object.__new__(cls) return cls.__obj def __init__(self,name): if One.__init_flag: print( "init....") self.name = name One.__init_flag = False if __name__=='__main__': a = One( "aa") print(a) b = One( "bb") print(b)
總結
本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!