淺析Python面向?qū)ο缶幊?/h1>
瀏覽:4日期:2022-07-18 08:05:01
概述
很多人接觸Python,都是從爬蟲(chóng)開(kāi)始,其實(shí)很多語(yǔ)言都可以做爬蟲(chóng),只是Python相對(duì)其他語(yǔ)言來(lái)說(shuō),更加簡(jiǎn)單而已。但是Python并不止于爬蟲(chóng),在人工智能,科學(xué)計(jì)算等方面的應(yīng)用更加廣泛。古人云:萬(wàn)丈高樓平地起,要想有長(zhǎng)足的發(fā)展,打好基礎(chǔ)很重要,本文主要講解Python的面向?qū)ο笙嚓P(guān)知識(shí),僅供學(xué)習(xí)分享使用,如有不足之處,還請(qǐng)指正。
面向?qū)ο蟮奶卣?/b>
類(lèi):用來(lái)描述相同事物的特征的集合,如:Person 類(lèi),表示人,具有人的屬性和特征。對(duì)象:通過(guò)類(lèi)定義的具體的實(shí)例,如:zhangsan 表示一個(gè)具體的人。繼承:是指派生類(lèi)繼承基類(lèi)的方法和屬性,并具有自己屬性和特征,如:Man是Person的子類(lèi)。封裝:隱藏?cái)?shù)據(jù)和實(shí)現(xiàn)細(xì)節(jié),提供對(duì)外訪(fǎng)問(wèn)方法。多態(tài):一個(gè)基類(lèi),可以有多個(gè)派生類(lèi),可以有不同的形態(tài)。抽象:拋開(kāi)細(xì)節(jié),只關(guān)注本質(zhì)特征的過(guò)程。以上是面向?qū)ο蟮幕咎卣鳎敲碢ython在面向?qū)ο蠓矫媸侨绾巫龅哪兀?/p>
創(chuàng)建類(lèi)
如下所示:
使用 class 語(yǔ)句來(lái)創(chuàng)建一個(gè)新類(lèi),class 之后為類(lèi)的名稱(chēng)并以冒號(hào)結(jié)尾。 Python的類(lèi),沒(méi)有大括號(hào)表示類(lèi)的內(nèi)容范圍,而是通過(guò)縮進(jìn)來(lái)實(shí)現(xiàn)。 類(lèi)的成員方法和普通方法的區(qū)別是,方法定義的第一個(gè)參數(shù)是self,表示類(lèi)的實(shí)例,但在調(diào)用時(shí)不需要。 其中__init__方法為類(lèi)的初始化方法,當(dāng)聲明對(duì)象時(shí),會(huì)調(diào)用對(duì)應(yīng)的方法。 其中__del__方法為析構(gòu)函數(shù),當(dāng)類(lèi)被釋放時(shí)調(diào)用。class Employee: '''員工類(lèi)''' emp_count = 0 # 變量是一個(gè)類(lèi)變量,它的值將在這個(gè)類(lèi)的所有實(shí)例之間共享 def __init__(self, name, salary): '''初始化''' self.name = name self.salary = salary Employee.emp_count += 1 def display_count(self): '''顯示數(shù)量''' print(’Total Employee =’, Employee.emp_count) def display_employee(self): '''顯示信息''' print(’name =’, self.name, ’, salary = ’, self.salary) def prt(self): '''打印自己''' print(self) print(self.__class__) def __del__(self): '''析構(gòu)函數(shù)''' print(self, ’被釋放了’)
創(chuàng)建對(duì)象
Python創(chuàng)建對(duì)象,不需要new關(guān)鍵字,類(lèi)似于函數(shù)的調(diào)用,和Java及.Net不同。如下所示:
’創(chuàng)建第一個(gè)對(duì)象’ emp = Employee(’Jack’, 20) emp.display_count() emp.display_employee() emp.prt()
動(dòng)態(tài)添加與刪除對(duì)象屬性
對(duì)象的屬性可以動(dòng)態(tài)添加,這點(diǎn)與編譯型語(yǔ)言不同,如下所示:
emp.age = 17 # 添加一個(gè) ’age’ 屬性 emp.age = 28 # 修改 ’age’ 屬性 del emp.age # 刪除 ’age’ 屬性
也可以通過(guò)Python的內(nèi)置方法來(lái)添加和獲取屬性,如下所示:
print(getattr(emp, ’name’)) # 獲取屬性print(hasattr(emp, ’age’)) # 是否包含屬性setattr(emp, ’age’, 18) # 設(shè)置屬性和值print(hasattr(emp, ’age’)) # 是否包含屬性print(getattr(emp, ’age’)) # 獲取屬性delattr(emp, ’age’) # 刪除屬性print(hasattr(emp, ’age’)) # 是否包含屬性
Python也有內(nèi)置類(lèi)的一些屬性,如下所示:
# 內(nèi)置對(duì)象 print('Employee.__doc__:', Employee.__doc__) print('Employee.__name__:', Employee.__name__) print('Employee.__module__:', Employee.__module__) print('Employee.__bases__:', Employee.__bases__) print('Employee.__dict__:', Employee.__dict__)
類(lèi)的屬性與方法
類(lèi)的私有屬性,以雙下劃線(xiàn)開(kāi)頭,只可以在類(lèi)內(nèi)部通過(guò)self進(jìn)行訪(fǎng)問(wèn)。 類(lèi)的protected屬性,以下劃線(xiàn)開(kāi)頭,只允許子類(lèi)和自身調(diào)用。 在類(lèi)的內(nèi)部,使用 def 關(guān)鍵字可以為類(lèi)定義一個(gè)方法,與一般函數(shù)定義不同,類(lèi)方法必須包含參數(shù) self,且為第一個(gè)參數(shù) 類(lèi)的私有方法:以?xún)蓚€(gè)下劃線(xiàn)開(kāi)頭,聲明該方法為私有方法,不能在類(lèi)的外部調(diào)用。在類(lèi)的內(nèi)部調(diào)用 self.__private_methods 如下所示:
class JustCounter: '''類(lèi)描述''' __secretCount = 0 # 類(lèi)的私有變量 publicCount = 0 # 公開(kāi)變量 def count(self): self.__secretCount += 1 self.publicCount += 1 print(’私有變量:’, self.__secretCount)
Python不允許實(shí)例化的類(lèi)訪(fǎng)問(wèn)私有數(shù)據(jù),但你可以使用 object._className__attrName( 對(duì)象名._類(lèi)名__私有屬性名 )訪(fǎng)問(wèn)屬性,如下所示:
print(counter._JustCounter__secretCount)
類(lèi)的繼承
面向?qū)ο蟮木幊處?lái)的主要好處之一是代碼的重用,實(shí)現(xiàn)這種重用的方法之一是通過(guò)繼承機(jī)制。通過(guò)繼承創(chuàng)建的新類(lèi)稱(chēng)為子類(lèi)或派生類(lèi),被繼承的類(lèi)稱(chēng)為基類(lèi)、父類(lèi)或超類(lèi)。
Python中的繼承通過(guò) class 子類(lèi)名(父類(lèi)名): 的格式實(shí)現(xiàn)。 子類(lèi)可以調(diào)用父類(lèi)的方法和定義自己的方法。 如果父類(lèi)方法的功能不能滿(mǎn)足需求,子類(lèi)可以重寫(xiě)(overrides)父類(lèi)的方法。 如下所示:Parent表示一個(gè)父類(lèi),擁有自己的屬性和方法。
class Parent: '''定義父類(lèi)''' parentAttr = 100 def __init__(self): print(’調(diào)用父類(lèi)的構(gòu)造函數(shù)’) def parentMethod(self): print(’調(diào)用父類(lèi)方法’) def setAttr(self, attr): Parent.parentAttr = attr def getAttr(self): print(’父類(lèi)屬性:’, Parent.parentAttr) def myMethod(self): print(’我是父類(lèi)的MyMethod’)
Child表示一個(gè)子類(lèi),繼承自Parent,如下所示:
class Child(Parent): '''定義子類(lèi)''' def __init__(self): print(’調(diào)用子類(lèi)的構(gòu)造方法’) def childMethod(self): print(’調(diào)用子類(lèi)方法’) def myMethod(self): '''重寫(xiě)Overrides父類(lèi)方法''' print(’我是子類(lèi)的MyMethod’) def __str__(self): '''重寫(xiě)方法,適合人閱讀''' return ’str方法返回’
子類(lèi)的實(shí)例化
如下所示:
c = Child() # 實(shí)例化子類(lèi)對(duì)象 c.childMethod() # 調(diào)用子類(lèi)方法 c.parentMethod() # 調(diào)用父類(lèi)方法 c.setAttr(200) # 再次調(diào)用父類(lèi)方法,設(shè)置屬性 c.getAttr() # 再次調(diào)用父類(lèi)方法 獲取屬性 c.myMethod() # 調(diào)用的是子類(lèi)的MyMethod
可以通過(guò)內(nèi)置函數(shù),判斷子類(lèi)與類(lèi)的關(guān)系,如下所示:
print(issubclass(Child, Parent)) # 判斷是否是對(duì)應(yīng)的父子關(guān)系 print(isinstance(c, Child)) # 判斷是否是實(shí)例對(duì)象 print(isinstance(c, Parent)) # 判斷是否是實(shí)例對(duì)象
以上就是淺析Python面向?qū)ο缶幊痰脑敿?xì)內(nèi)容,更多關(guān)于Python面向?qū)ο缶幊痰馁Y料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. ASP中解決“對(duì)象關(guān)閉時(shí),不允許操作。”的詭異問(wèn)題……2. IDEA版最新MyBatis程序配置教程詳解3. 教你如何寫(xiě)出可維護(hù)的JS代碼4. docker /var/lib/docker/aufs/mnt 目錄清理方法5. ASP刪除img標(biāo)簽的style屬性只保留src的正則函數(shù)6. 使用Python和百度語(yǔ)音識(shí)別生成視頻字幕的實(shí)現(xiàn)7. Gitlab CI-CD自動(dòng)化部署SpringBoot項(xiàng)目的方法步驟8. Django:使用filter的pk進(jìn)行多值查詢(xún)操作9. 淺談SpringMVC jsp前臺(tái)獲取參數(shù)的方式 EL表達(dá)式10. css代碼優(yōu)化的12個(gè)技巧
概述
很多人接觸Python,都是從爬蟲(chóng)開(kāi)始,其實(shí)很多語(yǔ)言都可以做爬蟲(chóng),只是Python相對(duì)其他語(yǔ)言來(lái)說(shuō),更加簡(jiǎn)單而已。但是Python并不止于爬蟲(chóng),在人工智能,科學(xué)計(jì)算等方面的應(yīng)用更加廣泛。古人云:萬(wàn)丈高樓平地起,要想有長(zhǎng)足的發(fā)展,打好基礎(chǔ)很重要,本文主要講解Python的面向?qū)ο笙嚓P(guān)知識(shí),僅供學(xué)習(xí)分享使用,如有不足之處,還請(qǐng)指正。
面向?qū)ο蟮奶卣?/b>
類(lèi):用來(lái)描述相同事物的特征的集合,如:Person 類(lèi),表示人,具有人的屬性和特征。對(duì)象:通過(guò)類(lèi)定義的具體的實(shí)例,如:zhangsan 表示一個(gè)具體的人。繼承:是指派生類(lèi)繼承基類(lèi)的方法和屬性,并具有自己屬性和特征,如:Man是Person的子類(lèi)。封裝:隱藏?cái)?shù)據(jù)和實(shí)現(xiàn)細(xì)節(jié),提供對(duì)外訪(fǎng)問(wèn)方法。多態(tài):一個(gè)基類(lèi),可以有多個(gè)派生類(lèi),可以有不同的形態(tài)。抽象:拋開(kāi)細(xì)節(jié),只關(guān)注本質(zhì)特征的過(guò)程。以上是面向?qū)ο蟮幕咎卣鳎敲碢ython在面向?qū)ο蠓矫媸侨绾巫龅哪兀?/p>
創(chuàng)建類(lèi)
如下所示:
使用 class 語(yǔ)句來(lái)創(chuàng)建一個(gè)新類(lèi),class 之后為類(lèi)的名稱(chēng)并以冒號(hào)結(jié)尾。 Python的類(lèi),沒(méi)有大括號(hào)表示類(lèi)的內(nèi)容范圍,而是通過(guò)縮進(jìn)來(lái)實(shí)現(xiàn)。 類(lèi)的成員方法和普通方法的區(qū)別是,方法定義的第一個(gè)參數(shù)是self,表示類(lèi)的實(shí)例,但在調(diào)用時(shí)不需要。 其中__init__方法為類(lèi)的初始化方法,當(dāng)聲明對(duì)象時(shí),會(huì)調(diào)用對(duì)應(yīng)的方法。 其中__del__方法為析構(gòu)函數(shù),當(dāng)類(lèi)被釋放時(shí)調(diào)用。class Employee: '''員工類(lèi)''' emp_count = 0 # 變量是一個(gè)類(lèi)變量,它的值將在這個(gè)類(lèi)的所有實(shí)例之間共享 def __init__(self, name, salary): '''初始化''' self.name = name self.salary = salary Employee.emp_count += 1 def display_count(self): '''顯示數(shù)量''' print(’Total Employee =’, Employee.emp_count) def display_employee(self): '''顯示信息''' print(’name =’, self.name, ’, salary = ’, self.salary) def prt(self): '''打印自己''' print(self) print(self.__class__) def __del__(self): '''析構(gòu)函數(shù)''' print(self, ’被釋放了’)
創(chuàng)建對(duì)象
Python創(chuàng)建對(duì)象,不需要new關(guān)鍵字,類(lèi)似于函數(shù)的調(diào)用,和Java及.Net不同。如下所示:
’創(chuàng)建第一個(gè)對(duì)象’ emp = Employee(’Jack’, 20) emp.display_count() emp.display_employee() emp.prt()
動(dòng)態(tài)添加與刪除對(duì)象屬性
對(duì)象的屬性可以動(dòng)態(tài)添加,這點(diǎn)與編譯型語(yǔ)言不同,如下所示:
emp.age = 17 # 添加一個(gè) ’age’ 屬性 emp.age = 28 # 修改 ’age’ 屬性 del emp.age # 刪除 ’age’ 屬性
也可以通過(guò)Python的內(nèi)置方法來(lái)添加和獲取屬性,如下所示:
print(getattr(emp, ’name’)) # 獲取屬性print(hasattr(emp, ’age’)) # 是否包含屬性setattr(emp, ’age’, 18) # 設(shè)置屬性和值print(hasattr(emp, ’age’)) # 是否包含屬性print(getattr(emp, ’age’)) # 獲取屬性delattr(emp, ’age’) # 刪除屬性print(hasattr(emp, ’age’)) # 是否包含屬性
Python也有內(nèi)置類(lèi)的一些屬性,如下所示:
# 內(nèi)置對(duì)象 print('Employee.__doc__:', Employee.__doc__) print('Employee.__name__:', Employee.__name__) print('Employee.__module__:', Employee.__module__) print('Employee.__bases__:', Employee.__bases__) print('Employee.__dict__:', Employee.__dict__)
類(lèi)的屬性與方法
類(lèi)的私有屬性,以雙下劃線(xiàn)開(kāi)頭,只可以在類(lèi)內(nèi)部通過(guò)self進(jìn)行訪(fǎng)問(wèn)。 類(lèi)的protected屬性,以下劃線(xiàn)開(kāi)頭,只允許子類(lèi)和自身調(diào)用。 在類(lèi)的內(nèi)部,使用 def 關(guān)鍵字可以為類(lèi)定義一個(gè)方法,與一般函數(shù)定義不同,類(lèi)方法必須包含參數(shù) self,且為第一個(gè)參數(shù) 類(lèi)的私有方法:以?xún)蓚€(gè)下劃線(xiàn)開(kāi)頭,聲明該方法為私有方法,不能在類(lèi)的外部調(diào)用。在類(lèi)的內(nèi)部調(diào)用 self.__private_methods如下所示:
class JustCounter: '''類(lèi)描述''' __secretCount = 0 # 類(lèi)的私有變量 publicCount = 0 # 公開(kāi)變量 def count(self): self.__secretCount += 1 self.publicCount += 1 print(’私有變量:’, self.__secretCount)
Python不允許實(shí)例化的類(lèi)訪(fǎng)問(wèn)私有數(shù)據(jù),但你可以使用 object._className__attrName( 對(duì)象名._類(lèi)名__私有屬性名 )訪(fǎng)問(wèn)屬性,如下所示:
print(counter._JustCounter__secretCount)
類(lèi)的繼承
面向?qū)ο蟮木幊處?lái)的主要好處之一是代碼的重用,實(shí)現(xiàn)這種重用的方法之一是通過(guò)繼承機(jī)制。通過(guò)繼承創(chuàng)建的新類(lèi)稱(chēng)為子類(lèi)或派生類(lèi),被繼承的類(lèi)稱(chēng)為基類(lèi)、父類(lèi)或超類(lèi)。
Python中的繼承通過(guò) class 子類(lèi)名(父類(lèi)名): 的格式實(shí)現(xiàn)。 子類(lèi)可以調(diào)用父類(lèi)的方法和定義自己的方法。 如果父類(lèi)方法的功能不能滿(mǎn)足需求,子類(lèi)可以重寫(xiě)(overrides)父類(lèi)的方法。如下所示:Parent表示一個(gè)父類(lèi),擁有自己的屬性和方法。
class Parent: '''定義父類(lèi)''' parentAttr = 100 def __init__(self): print(’調(diào)用父類(lèi)的構(gòu)造函數(shù)’) def parentMethod(self): print(’調(diào)用父類(lèi)方法’) def setAttr(self, attr): Parent.parentAttr = attr def getAttr(self): print(’父類(lèi)屬性:’, Parent.parentAttr) def myMethod(self): print(’我是父類(lèi)的MyMethod’)
Child表示一個(gè)子類(lèi),繼承自Parent,如下所示:
class Child(Parent): '''定義子類(lèi)''' def __init__(self): print(’調(diào)用子類(lèi)的構(gòu)造方法’) def childMethod(self): print(’調(diào)用子類(lèi)方法’) def myMethod(self): '''重寫(xiě)Overrides父類(lèi)方法''' print(’我是子類(lèi)的MyMethod’) def __str__(self): '''重寫(xiě)方法,適合人閱讀''' return ’str方法返回’
子類(lèi)的實(shí)例化
如下所示:
c = Child() # 實(shí)例化子類(lèi)對(duì)象 c.childMethod() # 調(diào)用子類(lèi)方法 c.parentMethod() # 調(diào)用父類(lèi)方法 c.setAttr(200) # 再次調(diào)用父類(lèi)方法,設(shè)置屬性 c.getAttr() # 再次調(diào)用父類(lèi)方法 獲取屬性 c.myMethod() # 調(diào)用的是子類(lèi)的MyMethod
可以通過(guò)內(nèi)置函數(shù),判斷子類(lèi)與類(lèi)的關(guān)系,如下所示:
print(issubclass(Child, Parent)) # 判斷是否是對(duì)應(yīng)的父子關(guān)系 print(isinstance(c, Child)) # 判斷是否是實(shí)例對(duì)象 print(isinstance(c, Parent)) # 判斷是否是實(shí)例對(duì)象
以上就是淺析Python面向?qū)ο缶幊痰脑敿?xì)內(nèi)容,更多關(guān)于Python面向?qū)ο缶幊痰馁Y料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
