python 面向?qū)ο笕筇卣髟斀?/h1>
更新時(shí)間:2021年10月27日 15:37:40 作者:寵乖儀
這篇文章主要介紹了python 面向?qū)ο笕筇卣?,小編覺得這篇文章講的不錯(cuò),感興趣的朋友一起來閱讀下面文章吧
一、面向?qū)ο笕筇卣鹘榻B
Python 是面向?qū)ο蟮恼Z言,也支持面向?qū)ο缶幊痰娜筇匦裕豪^承、封裝(隱藏)、多態(tài)。
1、封裝(隱藏)
隱藏對象的屬性和實(shí)現(xiàn)細(xì)節(jié),只對外提供必要的方法。
通過“私有屬性、私有方法”的方式,實(shí)現(xiàn)“封裝”。Python 追求簡潔的語法
2、繼承
繼承可以讓子類具有父類的特性,提高了代碼的重用性。從設(shè)計(jì)上是一種增量進(jìn)化,原有父類設(shè)計(jì)不變的情況下,可以增加新的功能,或者改進(jìn)已有的算法。
3、多態(tài)
多態(tài)是指同一個(gè)方法調(diào)用由于對象不同會(huì)產(chǎn)生不同的行為。生活中這樣的例子比比皆是:同樣是休息方法,人不同休息方法不同。張三休息是睡覺,李四休息是玩游戲,程序員休息是“敲幾行代碼”。
二、繼承
繼承是面向?qū)ο蟪绦蛟O(shè)計(jì)的重要特征,也是實(shí)現(xiàn)“代碼復(fù)用”的重要手段。
如果一個(gè)新類繼承自一個(gè)設(shè)計(jì)好的類,就直接具備了已有類的特征,就大大降低了工作
難度。已有的類,我們稱為“父類或者基類”,新的類,我們稱為“子類或者派生類”。
1、語法格式
Python 支持多重繼承,一個(gè)子類可以繼承多個(gè)父類。繼承的語法格式如下:
class 子類類名(父類 1[,父類 2,...]):
類體:如果在類定義中沒有指定父類,則默認(rèn)父類是 object 類。也就是說,object 是所有類的父類,里面定義了一些所有類共有的默認(rèn)實(shí)現(xiàn),比如:__new__()。
定義子類時(shí),必須在其構(gòu)造函數(shù)中調(diào)用父類的構(gòu)造函數(shù)。調(diào)用格式如下:
父類名.__init__(self, 參數(shù)列表)
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)
# 構(gòu)造函數(shù)中包含調(diào)用父類構(gòu)造函數(shù)。根據(jù)需要,不是必須。 子類并不會(huì)自動(dòng)調(diào)用父類的__init__(),我
# 們必須顯式的調(diào)用它。
if __name__ == '__main__':
s=Student('諸葛',18,1)
s.say_age()
2、類成員的繼承和重寫
1. 成員繼承:子類繼承了父類除構(gòu)造方法之外的所有成員。
2. 方法重寫:子類可以重新定義父類中的方法,這樣就會(huì)覆蓋父類的方法,也稱為“重寫”
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)
# 構(gòu)造函數(shù)中包含調(diào)用父類構(gòu)造函數(shù)。根據(jù)需要,不是必須。 子類并不會(huì)自動(dòng)調(diào)用父類的__init__(),我
# 們必須顯式的調(diào)用它。
if __name__ == '__main__':
s=Student('諸葛',18,1)
s.say_age()
3、super()獲得父類定義
在子類中,如果想要獲得父類的方法時(shí),我們可以通過 super()來做。
super()代表父類的定義,不是父類對象。
class A:
def say(self):
print("A: ",self)
print("say AAA")
class B(A):
def say(self):
#A.say(self) 調(diào)用父類的 say 方法
super().say() #通過 super()調(diào)用父類的方法
print("say BBB")
if __name__ =="__main__:
b = B()
b.say()
4、設(shè)計(jì)模式_工廠模式實(shí)現(xiàn)
工廠模式實(shí)現(xiàn)了創(chuàng)建者和調(diào)用者的分離,使用專門的工廠類將選擇實(shí)現(xiàn)類、創(chuàng)建對象進(jìn)行統(tǒng)一的管理和控制。
class CarFactory:
def createCar(self,brand):
if brand == "1":
return one()
elif brand == "2":
return two()
elif brand == '3':
return three()
else:
return "未知品牌,無法創(chuàng)建"
class one:
pass
class two:
pass
class three:
pass
factory = CarFactory()
c1 = factory.createCar("1")
c2 = factory.createCar("2")
print(c1)
print(c2)
5、設(shè)計(jì)模式_單例模式實(shí)現(xiàn)
單例模式(Singleton Pattern)的核心作用是確保一個(gè)類只有一個(gè)實(shí)例,并且提供一個(gè)訪問該實(shí)例的全局訪問點(diǎn)。
單例模式只生成一個(gè)實(shí)例對象,減少了對系統(tǒng)資源的開銷。當(dāng)一個(gè)對象的產(chǎn)生需要比較多的資源,如讀取配置文件、產(chǎn)生其他依賴對象時(shí),可以產(chǎn)生一個(gè)“單例對象”,然后永久駐留內(nèi)存中,從而極大的降低開銷。
class One:
__obj = None # 用于存儲(chǔ)這個(gè)單例
__init_flag = True
def __new__(cls, *args, **kwargs):
# 指的是One這個(gè)類里面的 類屬性
if cls.__obj == None:
# object 是類的默認(rèn)父類
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)
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
-
在Python中實(shí)現(xiàn)函數(shù)重載的示例代碼
這篇文章主要介紹了在Python中實(shí)現(xiàn)函數(shù)重載的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧 2019-12-12
-
python實(shí)現(xiàn)簡單圖書管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡單圖書管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下 2019-11-11
-
一篇文章教你用Python實(shí)現(xiàn)一個(gè)學(xué)生管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下 2021-09-09
-
Matplotlib實(shí)戰(zhàn)之柱狀圖繪制詳解
柱狀圖,是一種使用矩形條,對不同類別進(jìn)行數(shù)值比較的統(tǒng)計(jì)圖表,這篇文章主要為大家詳細(xì)介紹了如何使用Matplotlib繪制柱狀圖,需要的可以參考下 2023-08-08
-
python中random.randint和random.randrange的區(qū)別詳解
這篇文章主要介紹了python中random.randint和random.randrange的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧 2020-09-09
-
使用Django實(shí)現(xiàn)文章與多個(gè)標(biāo)簽關(guān)聯(lián)的示例詳解
在構(gòu)建一個(gè)博客或內(nèi)容管理系統(tǒng)時(shí),經(jīng)常需要實(shí)現(xiàn)文章與標(biāo)簽的關(guān)聯(lián),在 Django 中,我們可以利用 ManyToManyField 來實(shí)現(xiàn)文章與標(biāo)簽的多對多關(guān)系,在本文中,我們將詳細(xì)探討如何使用 Django 模型實(shí)現(xiàn)文章與多個(gè)標(biāo)簽的關(guān)聯(lián),需要的朋友可以參考下 2023-11-11
-
Linux下Pycharm、Anaconda環(huán)境配置及使用踩坑
這篇文章主要介紹了Linux下Pycharm、Anaconda環(huán)境配置及使用踩坑,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧 2018-12-12
-
深入挖掘Python自定義加密算法的設(shè)計(jì)與實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了Python中自定義加密算法的設(shè)計(jì)與實(shí)現(xiàn)的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下 2024-12-12
-
Python漏洞驗(yàn)證程序Poc利用入門到實(shí)戰(zhàn)編寫
這篇文章主要為大家介紹了Python?Poc利用入門到實(shí)戰(zhàn)編寫實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步 2022-02-02
最新評論
一、面向?qū)ο笕筇卣鹘榻B
Python 是面向?qū)ο蟮恼Z言,也支持面向?qū)ο缶幊痰娜筇匦裕豪^承、封裝(隱藏)、多態(tài)。
1、封裝(隱藏)
隱藏對象的屬性和實(shí)現(xiàn)細(xì)節(jié),只對外提供必要的方法。
通過“私有屬性、私有方法”的方式,實(shí)現(xiàn)“封裝”。Python 追求簡潔的語法
2、繼承
繼承可以讓子類具有父類的特性,提高了代碼的重用性。從設(shè)計(jì)上是一種增量進(jìn)化,原有父類設(shè)計(jì)不變的情況下,可以增加新的功能,或者改進(jìn)已有的算法。
3、多態(tài)
多態(tài)是指同一個(gè)方法調(diào)用由于對象不同會(huì)產(chǎn)生不同的行為。生活中這樣的例子比比皆是:同樣是休息方法,人不同休息方法不同。張三休息是睡覺,李四休息是玩游戲,程序員休息是“敲幾行代碼”。
二、繼承
繼承是面向?qū)ο蟪绦蛟O(shè)計(jì)的重要特征,也是實(shí)現(xiàn)“代碼復(fù)用”的重要手段。
如果一個(gè)新類繼承自一個(gè)設(shè)計(jì)好的類,就直接具備了已有類的特征,就大大降低了工作
難度。已有的類,我們稱為“父類或者基類”,新的類,我們稱為“子類或者派生類”。
1、語法格式
Python 支持多重繼承,一個(gè)子類可以繼承多個(gè)父類。繼承的語法格式如下:
class 子類類名(父類 1[,父類 2,...]):
類體:如果在類定義中沒有指定父類,則默認(rèn)父類是 object 類。也就是說,object 是所有類的父類,里面定義了一些所有類共有的默認(rèn)實(shí)現(xiàn),比如:__new__()。
定義子類時(shí),必須在其構(gòu)造函數(shù)中調(diào)用父類的構(gòu)造函數(shù)。調(diào)用格式如下:
父類名.__init__(self, 參數(shù)列表)
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) # 構(gòu)造函數(shù)中包含調(diào)用父類構(gòu)造函數(shù)。根據(jù)需要,不是必須。 子類并不會(huì)自動(dòng)調(diào)用父類的__init__(),我 # 們必須顯式的調(diào)用它。 if __name__ == '__main__': s=Student('諸葛',18,1) s.say_age()
2、類成員的繼承和重寫
1. 成員繼承:子類繼承了父類除構(gòu)造方法之外的所有成員。
2. 方法重寫:子類可以重新定義父類中的方法,這樣就會(huì)覆蓋父類的方法,也稱為“重寫”
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) # 構(gòu)造函數(shù)中包含調(diào)用父類構(gòu)造函數(shù)。根據(jù)需要,不是必須。 子類并不會(huì)自動(dòng)調(diào)用父類的__init__(),我 # 們必須顯式的調(diào)用它。 if __name__ == '__main__': s=Student('諸葛',18,1) s.say_age()
3、super()獲得父類定義
在子類中,如果想要獲得父類的方法時(shí),我們可以通過 super()來做。
super()代表父類的定義,不是父類對象。
class A: def say(self): print("A: ",self) print("say AAA") class B(A): def say(self): #A.say(self) 調(diào)用父類的 say 方法 super().say() #通過 super()調(diào)用父類的方法 print("say BBB") if __name__ =="__main__: b = B() b.say()
4、設(shè)計(jì)模式_工廠模式實(shí)現(xiàn)
工廠模式實(shí)現(xiàn)了創(chuàng)建者和調(diào)用者的分離,使用專門的工廠類將選擇實(shí)現(xiàn)類、創(chuàng)建對象進(jìn)行統(tǒng)一的管理和控制。
class CarFactory: def createCar(self,brand): if brand == "1": return one() elif brand == "2": return two() elif brand == '3': return three() else: return "未知品牌,無法創(chuàng)建" class one: pass class two: pass class three: pass factory = CarFactory() c1 = factory.createCar("1") c2 = factory.createCar("2") print(c1) print(c2)
5、設(shè)計(jì)模式_單例模式實(shí)現(xiàn)
單例模式(Singleton Pattern)的核心作用是確保一個(gè)類只有一個(gè)實(shí)例,并且提供一個(gè)訪問該實(shí)例的全局訪問點(diǎn)。
單例模式只生成一個(gè)實(shí)例對象,減少了對系統(tǒng)資源的開銷。當(dāng)一個(gè)對象的產(chǎn)生需要比較多的資源,如讀取配置文件、產(chǎn)生其他依賴對象時(shí),可以產(chǎn)生一個(gè)“單例對象”,然后永久駐留內(nèi)存中,從而極大的降低開銷。
class One: __obj = None # 用于存儲(chǔ)這個(gè)單例 __init_flag = True def __new__(cls, *args, **kwargs): # 指的是One這個(gè)類里面的 類屬性 if cls.__obj == None: # object 是類的默認(rèn)父類 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)
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
在Python中實(shí)現(xiàn)函數(shù)重載的示例代碼
這篇文章主要介紹了在Python中實(shí)現(xiàn)函數(shù)重載的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12python實(shí)現(xiàn)簡單圖書管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡單圖書管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11一篇文章教你用Python實(shí)現(xiàn)一個(gè)學(xué)生管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)學(xué)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09Matplotlib實(shí)戰(zhàn)之柱狀圖繪制詳解
柱狀圖,是一種使用矩形條,對不同類別進(jìn)行數(shù)值比較的統(tǒng)計(jì)圖表,這篇文章主要為大家詳細(xì)介紹了如何使用Matplotlib繪制柱狀圖,需要的可以參考下2023-08-08python中random.randint和random.randrange的區(qū)別詳解
這篇文章主要介紹了python中random.randint和random.randrange的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09使用Django實(shí)現(xiàn)文章與多個(gè)標(biāo)簽關(guān)聯(lián)的示例詳解
在構(gòu)建一個(gè)博客或內(nèi)容管理系統(tǒng)時(shí),經(jīng)常需要實(shí)現(xiàn)文章與標(biāo)簽的關(guān)聯(lián),在 Django 中,我們可以利用 ManyToManyField 來實(shí)現(xiàn)文章與標(biāo)簽的多對多關(guān)系,在本文中,我們將詳細(xì)探討如何使用 Django 模型實(shí)現(xiàn)文章與多個(gè)標(biāo)簽的關(guān)聯(lián),需要的朋友可以參考下2023-11-11Linux下Pycharm、Anaconda環(huán)境配置及使用踩坑
這篇文章主要介紹了Linux下Pycharm、Anaconda環(huán)境配置及使用踩坑,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-12-12深入挖掘Python自定義加密算法的設(shè)計(jì)與實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了Python中自定義加密算法的設(shè)計(jì)與實(shí)現(xiàn)的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-12-12Python漏洞驗(yàn)證程序Poc利用入門到實(shí)戰(zhàn)編寫
這篇文章主要為大家介紹了Python?Poc利用入門到實(shí)戰(zhàn)編寫實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-02-02