淺析Python面向?qū)ο缶幊?/h1>
瀏覽:6日期:2022-07-18 08:05:01
概述
很多人接觸Python,都是從爬蟲開始,其實很多語言都可以做爬蟲,只是Python相對其他語言來說,更加簡單而已。但是Python并不止于爬蟲,在人工智能,科學計算等方面的應用更加廣泛。古人云:萬丈高樓平地起,要想有長足的發(fā)展,打好基礎很重要,本文主要講解Python的面向?qū)ο笙嚓P知識,僅供學習分享使用,如有不足之處,還請指正。
面向?qū)ο蟮奶卣?/b>
類:用來描述相同事物的特征的集合,如:Person 類,表示人,具有人的屬性和特征。對象:通過類定義的具體的實例,如:zhangsan 表示一個具體的人。繼承:是指派生類繼承基類的方法和屬性,并具有自己屬性和特征,如:Man是Person的子類。封裝:隱藏數(shù)據(jù)和實現(xiàn)細節(jié),提供對外訪問方法。多態(tài):一個基類,可以有多個派生類,可以有不同的形態(tài)。抽象:拋開細節(jié),只關注本質(zhì)特征的過程。以上是面向?qū)ο蟮幕咎卣鳎敲碢ython在面向?qū)ο蠓矫媸侨绾巫龅哪兀?/p>
創(chuàng)建類
如下所示:
使用 class 語句來創(chuàng)建一個新類,class 之后為類的名稱并以冒號結尾。 Python的類,沒有大括號表示類的內(nèi)容范圍,而是通過縮進來實現(xiàn)。 類的成員方法和普通方法的區(qū)別是,方法定義的第一個參數(shù)是self,表示類的實例,但在調(diào)用時不需要。 其中__init__方法為類的初始化方法,當聲明對象時,會調(diào)用對應的方法。 其中__del__方法為析構函數(shù),當類被釋放時調(diào)用。class Employee: '''員工類''' emp_count = 0 # 變量是一個類變量,它的值將在這個類的所有實例之間共享 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): '''析構函數(shù)''' print(self, ’被釋放了’)
創(chuàng)建對象
Python創(chuàng)建對象,不需要new關鍵字,類似于函數(shù)的調(diào)用,和Java及.Net不同。如下所示:
’創(chuàng)建第一個對象’ emp = Employee(’Jack’, 20) emp.display_count() emp.display_employee() emp.prt()
動態(tài)添加與刪除對象屬性
對象的屬性可以動態(tài)添加,這點與編譯型語言不同,如下所示:
emp.age = 17 # 添加一個 ’age’ 屬性 emp.age = 28 # 修改 ’age’ 屬性 del emp.age # 刪除 ’age’ 屬性
也可以通過Python的內(nèi)置方法來添加和獲取屬性,如下所示:
print(getattr(emp, ’name’)) # 獲取屬性print(hasattr(emp, ’age’)) # 是否包含屬性setattr(emp, ’age’, 18) # 設置屬性和值print(hasattr(emp, ’age’)) # 是否包含屬性print(getattr(emp, ’age’)) # 獲取屬性delattr(emp, ’age’) # 刪除屬性print(hasattr(emp, ’age’)) # 是否包含屬性
Python也有內(nèi)置類的一些屬性,如下所示:
# 內(nèi)置對象 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__)
類的屬性與方法
類的私有屬性,以雙下劃線開頭,只可以在類內(nèi)部通過self進行訪問。 類的protected屬性,以下劃線開頭,只允許子類和自身調(diào)用。 在類的內(nèi)部,使用 def 關鍵字可以為類定義一個方法,與一般函數(shù)定義不同,類方法必須包含參數(shù) self,且為第一個參數(shù) 類的私有方法:以兩個下劃線開頭,聲明該方法為私有方法,不能在類的外部調(diào)用。在類的內(nèi)部調(diào)用 self.__private_methods 如下所示:
class JustCounter: '''類描述''' __secretCount = 0 # 類的私有變量 publicCount = 0 # 公開變量 def count(self): self.__secretCount += 1 self.publicCount += 1 print(’私有變量:’, self.__secretCount)
Python不允許實例化的類訪問私有數(shù)據(jù),但你可以使用 object._className__attrName( 對象名._類名__私有屬性名 )訪問屬性,如下所示:
print(counter._JustCounter__secretCount)
類的繼承
面向?qū)ο蟮木幊處淼闹饕锰幹皇谴a的重用,實現(xiàn)這種重用的方法之一是通過繼承機制。通過繼承創(chuàng)建的新類稱為子類或派生類,被繼承的類稱為基類、父類或超類。
Python中的繼承通過 class 子類名(父類名): 的格式實現(xiàn)。 子類可以調(diào)用父類的方法和定義自己的方法。 如果父類方法的功能不能滿足需求,子類可以重寫(overrides)父類的方法。 如下所示:Parent表示一個父類,擁有自己的屬性和方法。
class Parent: '''定義父類''' parentAttr = 100 def __init__(self): print(’調(diào)用父類的構造函數(shù)’) def parentMethod(self): print(’調(diào)用父類方法’) def setAttr(self, attr): Parent.parentAttr = attr def getAttr(self): print(’父類屬性:’, Parent.parentAttr) def myMethod(self): print(’我是父類的MyMethod’)
Child表示一個子類,繼承自Parent,如下所示:
class Child(Parent): '''定義子類''' def __init__(self): print(’調(diào)用子類的構造方法’) def childMethod(self): print(’調(diào)用子類方法’) def myMethod(self): '''重寫Overrides父類方法''' print(’我是子類的MyMethod’) def __str__(self): '''重寫方法,適合人閱讀''' return ’str方法返回’
子類的實例化
如下所示:
c = Child() # 實例化子類對象 c.childMethod() # 調(diào)用子類方法 c.parentMethod() # 調(diào)用父類方法 c.setAttr(200) # 再次調(diào)用父類方法,設置屬性 c.getAttr() # 再次調(diào)用父類方法 獲取屬性 c.myMethod() # 調(diào)用的是子類的MyMethod
可以通過內(nèi)置函數(shù),判斷子類與類的關系,如下所示:
print(issubclass(Child, Parent)) # 判斷是否是對應的父子關系 print(isinstance(c, Child)) # 判斷是否是實例對象 print(isinstance(c, Parent)) # 判斷是否是實例對象
以上就是淺析Python面向?qū)ο缶幊痰脑敿殐?nèi)容,更多關于Python面向?qū)ο缶幊痰馁Y料請關注好吧啦網(wǎng)其它相關文章!
相關文章:
1. 基于javaweb+jsp實現(xiàn)學生宿舍管理系統(tǒng)2. 多級聯(lián)動下拉選擇框,動態(tài)獲取下一級3. ASP.NET MVC實現(xiàn)樹形導航菜單4. 如何封裝一個Ajax函數(shù)5. Java 接口和抽象類的區(qū)別詳解6. Laravel Eloquent ORM高級部分解析7. Django模板之基本的 for 循環(huán) 和 List內(nèi)容的顯示方式8. jsp response.sendRedirect()用法詳解9. Spring security 自定義過濾器實現(xiàn)Json參數(shù)傳遞并兼容表單參數(shù)(實例代碼)10. PHP擴展之URL編碼、解碼及解析——URLs
概述
很多人接觸Python,都是從爬蟲開始,其實很多語言都可以做爬蟲,只是Python相對其他語言來說,更加簡單而已。但是Python并不止于爬蟲,在人工智能,科學計算等方面的應用更加廣泛。古人云:萬丈高樓平地起,要想有長足的發(fā)展,打好基礎很重要,本文主要講解Python的面向?qū)ο笙嚓P知識,僅供學習分享使用,如有不足之處,還請指正。
面向?qū)ο蟮奶卣?/b>
類:用來描述相同事物的特征的集合,如:Person 類,表示人,具有人的屬性和特征。對象:通過類定義的具體的實例,如:zhangsan 表示一個具體的人。繼承:是指派生類繼承基類的方法和屬性,并具有自己屬性和特征,如:Man是Person的子類。封裝:隱藏數(shù)據(jù)和實現(xiàn)細節(jié),提供對外訪問方法。多態(tài):一個基類,可以有多個派生類,可以有不同的形態(tài)。抽象:拋開細節(jié),只關注本質(zhì)特征的過程。以上是面向?qū)ο蟮幕咎卣鳎敲碢ython在面向?qū)ο蠓矫媸侨绾巫龅哪兀?/p>
創(chuàng)建類
如下所示:
使用 class 語句來創(chuàng)建一個新類,class 之后為類的名稱并以冒號結尾。 Python的類,沒有大括號表示類的內(nèi)容范圍,而是通過縮進來實現(xiàn)。 類的成員方法和普通方法的區(qū)別是,方法定義的第一個參數(shù)是self,表示類的實例,但在調(diào)用時不需要。 其中__init__方法為類的初始化方法,當聲明對象時,會調(diào)用對應的方法。 其中__del__方法為析構函數(shù),當類被釋放時調(diào)用。class Employee: '''員工類''' emp_count = 0 # 變量是一個類變量,它的值將在這個類的所有實例之間共享 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): '''析構函數(shù)''' print(self, ’被釋放了’)
創(chuàng)建對象
Python創(chuàng)建對象,不需要new關鍵字,類似于函數(shù)的調(diào)用,和Java及.Net不同。如下所示:
’創(chuàng)建第一個對象’ emp = Employee(’Jack’, 20) emp.display_count() emp.display_employee() emp.prt()
動態(tài)添加與刪除對象屬性
對象的屬性可以動態(tài)添加,這點與編譯型語言不同,如下所示:
emp.age = 17 # 添加一個 ’age’ 屬性 emp.age = 28 # 修改 ’age’ 屬性 del emp.age # 刪除 ’age’ 屬性
也可以通過Python的內(nèi)置方法來添加和獲取屬性,如下所示:
print(getattr(emp, ’name’)) # 獲取屬性print(hasattr(emp, ’age’)) # 是否包含屬性setattr(emp, ’age’, 18) # 設置屬性和值print(hasattr(emp, ’age’)) # 是否包含屬性print(getattr(emp, ’age’)) # 獲取屬性delattr(emp, ’age’) # 刪除屬性print(hasattr(emp, ’age’)) # 是否包含屬性
Python也有內(nèi)置類的一些屬性,如下所示:
# 內(nèi)置對象 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__)
類的屬性與方法
類的私有屬性,以雙下劃線開頭,只可以在類內(nèi)部通過self進行訪問。 類的protected屬性,以下劃線開頭,只允許子類和自身調(diào)用。 在類的內(nèi)部,使用 def 關鍵字可以為類定義一個方法,與一般函數(shù)定義不同,類方法必須包含參數(shù) self,且為第一個參數(shù) 類的私有方法:以兩個下劃線開頭,聲明該方法為私有方法,不能在類的外部調(diào)用。在類的內(nèi)部調(diào)用 self.__private_methods如下所示:
class JustCounter: '''類描述''' __secretCount = 0 # 類的私有變量 publicCount = 0 # 公開變量 def count(self): self.__secretCount += 1 self.publicCount += 1 print(’私有變量:’, self.__secretCount)
Python不允許實例化的類訪問私有數(shù)據(jù),但你可以使用 object._className__attrName( 對象名._類名__私有屬性名 )訪問屬性,如下所示:
print(counter._JustCounter__secretCount)
類的繼承
面向?qū)ο蟮木幊處淼闹饕锰幹皇谴a的重用,實現(xiàn)這種重用的方法之一是通過繼承機制。通過繼承創(chuàng)建的新類稱為子類或派生類,被繼承的類稱為基類、父類或超類。
Python中的繼承通過 class 子類名(父類名): 的格式實現(xiàn)。 子類可以調(diào)用父類的方法和定義自己的方法。 如果父類方法的功能不能滿足需求,子類可以重寫(overrides)父類的方法。如下所示:Parent表示一個父類,擁有自己的屬性和方法。
class Parent: '''定義父類''' parentAttr = 100 def __init__(self): print(’調(diào)用父類的構造函數(shù)’) def parentMethod(self): print(’調(diào)用父類方法’) def setAttr(self, attr): Parent.parentAttr = attr def getAttr(self): print(’父類屬性:’, Parent.parentAttr) def myMethod(self): print(’我是父類的MyMethod’)
Child表示一個子類,繼承自Parent,如下所示:
class Child(Parent): '''定義子類''' def __init__(self): print(’調(diào)用子類的構造方法’) def childMethod(self): print(’調(diào)用子類方法’) def myMethod(self): '''重寫Overrides父類方法''' print(’我是子類的MyMethod’) def __str__(self): '''重寫方法,適合人閱讀''' return ’str方法返回’
子類的實例化
如下所示:
c = Child() # 實例化子類對象 c.childMethod() # 調(diào)用子類方法 c.parentMethod() # 調(diào)用父類方法 c.setAttr(200) # 再次調(diào)用父類方法,設置屬性 c.getAttr() # 再次調(diào)用父類方法 獲取屬性 c.myMethod() # 調(diào)用的是子類的MyMethod
可以通過內(nèi)置函數(shù),判斷子類與類的關系,如下所示:
print(issubclass(Child, Parent)) # 判斷是否是對應的父子關系 print(isinstance(c, Child)) # 判斷是否是實例對象 print(isinstance(c, Parent)) # 判斷是否是實例對象
以上就是淺析Python面向?qū)ο缶幊痰脑敿殐?nèi)容,更多關于Python面向?qū)ο缶幊痰馁Y料請關注好吧啦網(wǎng)其它相關文章!
