python學(xué)習(xí)之面向?qū)ο蟆救腴T初級(jí)篇】
前言
最近在學(xué)習(xí)Python的面向?qū)ο缶幊蹋郧笆菦](méi)有接觸過(guò)其它的面向?qū)ο缶幊痰恼Z(yǔ)言,因此學(xué)習(xí)這一部分是相當(dāng)帶勁的,這里也總結(jié)一下。
概述
- python支持多種編程范式:面向過(guò)程、面向?qū)ο?、面向切面(裝飾器部分)等。
- 面向過(guò)程:根據(jù)業(yè)務(wù)邏輯從上到下寫壘代碼
- 函數(shù)式:將某功能代碼封裝到函數(shù)中,日后便無(wú)需重復(fù)編寫,僅調(diào)用函數(shù)即可
- 面向?qū)ο螅簩?duì)函數(shù)進(jìn)行分類和封裝,讓開(kāi)發(fā)“更快更好更強(qiáng)...”
OOP思想
- 面向?qū)ο蟮幕菊軐W(xué):世界由具有各自運(yùn)動(dòng)規(guī)律和內(nèi)部狀態(tài)的對(duì)象組成,對(duì)象之間相互作用和通訊構(gòu)成了世界。
- 唯一性,世界沒(méi)有兩片相同的樹葉,同樣的沒(méi)有相同的對(duì)象。
- 分類性,分類是對(duì)現(xiàn)實(shí)世界的抽象。
- 三大特性:封裝、繼承和多態(tài)
面向?qū)ο蟮娜筇匦裕?/strong>
一、封裝
封裝,對(duì)具體對(duì)象的一種抽象,即將某些部分隱藏起來(lái),在程序外部看不到,即無(wú)法調(diào)用。
私有化:將類或函數(shù)中的某些屬性限制在某個(gè)區(qū)域之內(nèi),外部無(wú)法調(diào)用。
Python中私有化的方法也比較簡(jiǎn)單,就是在準(zhǔn)備私有化的屬性(包括方法、數(shù)據(jù))名字前面加雙下劃線。
例如:
class ProtectMe(object):
def __init__(self):
self.me = "qiwsir"
self.__name = "kivi"
def __python(self):
print("I love Python.")
def code(self):
print9"Which language do you like?")
self.__python()
if __name__ == "__main__":
p = ProtectMe()
print(p.me)
print(p.__name)
#運(yùn)行結(jié)果
qiwsir
Traceback (most recent call last):
File "21102.py", line 21, in <module>
print p.__name
AttributeError: 'ProtectMe' object has no attribute '__name'
說(shuō)明:__name屬性隱藏了,無(wú)法調(diào)用。
調(diào)用私有屬性,可以使用property函數(shù)
class ProtectMe(object): def __init__(self): self.me = "qiwsir" self.__name = "kivi" @property def name(self): return self.__name if __name__ == "__main__": p = ProtectMe() print(p.name) #運(yùn)行結(jié)果 kivi
所以,在使用面向?qū)ο蟮姆庋b特性時(shí),需要:
- 將內(nèi)容封裝到某處
- 從某處調(diào)用被封裝的內(nèi)容
第一步:將內(nèi)容封裝到某處

self 是一個(gè)形式參數(shù),當(dāng)執(zhí)行 obj1 = Foo('wupeiqi', 18 ) 時(shí),self 等于 obj1
當(dāng)執(zhí)行 obj2 = Foo('alex', 78 ) 時(shí),self 等于 obj2
所以,內(nèi)容其實(shí)被封裝到了對(duì)象 obj1 和 obj2 中,每個(gè)對(duì)象中都有 name 和 age 屬性,在內(nèi)存里類似于下圖來(lái)保存。

第二步:從某處調(diào)用被封裝的內(nèi)容
調(diào)用被封裝的內(nèi)容時(shí),有兩種情況:
- 通過(guò)對(duì)象直接調(diào)用
- 通過(guò)self間接調(diào)用
class Role(object):
ac = None #類變量
def __init__(self,name,role,weapon,life_value):
#初始化方法
self.name = name #實(shí)例變量(成員變量)
self.role = role
self.weapon = weapon
self.life_val = life_value
def buy_weapon(self,weapon): #定義方法
#self:表示實(shí)例本身
self.weapon = weapon
# print("%s is buying [%s]" %(self.name,weapon))
#把一個(gè)抽象的類變成一個(gè)具體的對(duì)象的過(guò)程,叫實(shí)例化
p1 = Role("sanjiang",'Police',"B10",90) #實(shí)例
t1 = Role("Chunyun",'Terrorist',"B11",100)
二、繼承
繼承,面向?qū)ο笾械睦^承和現(xiàn)實(shí)生活中的繼承相同,即:子可以繼承父的內(nèi)容。
class SchoolMember(object):
# member_nums = 0
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
# self.enroll()
def enroll(self):
SchoolMember.member_nums += 1
print("SchoolMember [%s] is enrolled!" %self.name)
def tell(self):
print("Hello my name is [%s]" %self.name)
class Teacher(SchoolMember):
def __init__(self,name,age,sex,course,salary): #重寫父類的__init__方法
super(Teacher,self).__init__(name,age,sex) #繼承(新式類)
# SchoolMember.__init__(self,name,age,sex) #繼承(舊式類)
self.course = course
self.salary = salary
def teaching(self):
print("Teacher [%s] is teaching [%s]" %(self.name,self.course))
class Student(SchoolMember):
def __init__(self,name,age,sex,course,tuition):
super(Student,self).__init__(name,age,sex)
self.course = course
self.tuition = tuition
def pay_tuition(self):
print("ca,student [%s] paying tuition [%s] again" %(self.name,self.tuition))
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。
相關(guān)文章
Python GUI庫(kù)PyQt5圖形和特效樣式QSS介紹
這篇文章主要介紹了Python GUI庫(kù)PyQt5圖形和特效樣式QSS介紹,需要的朋友可以參考下2020-02-02
對(duì)python opencv 添加文字 cv2.putText 的各參數(shù)介紹
今天小編就為大家分享一篇對(duì)python opencv 添加文字 cv2.putText 的各參數(shù)介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
基于Python實(shí)現(xiàn)人工智能算法的方法詳解
Python已經(jīng)成為了機(jī)器學(xué)習(xí)領(lǐng)域最受歡迎的編程語(yǔ)言之一,Python的簡(jiǎn)潔性和易用性使其成為了開(kāi)發(fā)人員和數(shù)據(jù)科學(xué)家的首選語(yǔ)言,在本文中,我們將探討如何使用Python實(shí)現(xiàn)人工智能算法,感興趣的小伙伴跟著小編一起來(lái)探討吧2023-06-06
Mac中Python 3環(huán)境下安裝scrapy的方法教程
作為一名python爬蟲愛(ài)好者,怎能不折騰下Scrapy?折騰了許久之后終于安裝到了mac中,所以下面這篇文章主要給大家介紹了關(guān)于Mac系統(tǒng)中Python 3環(huán)境下安裝scrapy的相關(guān)資料,文中將實(shí)現(xiàn)的步驟一步步介紹的非常詳細(xì),需要的朋友可以參考下。2017-10-10
Pytorch實(shí)現(xiàn)GoogLeNet的方法
今天小編就為大家分享一篇Pytorch實(shí)現(xiàn)GoogLeNet的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08
Python使用conda如何安裝requirement.txt的擴(kuò)展包
這篇文章主要介紹了Python使用conda如何安裝requirement.txt的擴(kuò)展包問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
ndarray的轉(zhuǎn)置(numpy.transpose()與A.T命令對(duì)比分析)
這篇文章主要介紹了ndarray的轉(zhuǎn)置(numpy.transpose()與A.T命令對(duì)比分析),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
在python tkinter界面中添加按鈕的實(shí)例
今天小編就為大家分享一篇在python tkinter界面中添加按鈕的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03

