淺析Python面向?qū)ο缶幊?/h1>
更新時(shí)間:2020年07月10日 11:52:45 作者:Alan.hsiang
這篇文章主要介紹了Python面向?qū)ο缶幊痰南嚓P(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
概述
很多人接觸Python,都是從爬蟲開始,其實(shí)很多語言都可以做爬蟲,只是Python相對(duì)其他語言來說,更加簡(jiǎn)單而已。但是Python并不止于爬蟲,在人工智能,科學(xué)計(jì)算等方面的應(yīng)用更加廣泛。古人云:萬丈高樓平地起,要想有長(zhǎng)足的發(fā)展,打好基礎(chǔ)很重要,本文主要講解Python的面向?qū)ο笙嚓P(guān)知識(shí),僅供學(xué)習(xí)分享使用,如有不足之處,還請(qǐng)指正。
面向?qū)ο蟮奶卣?/strong>
類:用來描述相同事物的特征的集合,如:Person 類,表示人,具有人的屬性和特征。
對(duì)象:通過類定義的具體的實(shí)例,如:zhangsan 表示一個(gè)具體的人。
繼承:是指派生類繼承基類的方法和屬性,并具有自己屬性和特征,如:Man是Person的子類。
封裝:隱藏?cái)?shù)據(jù)和實(shí)現(xiàn)細(xì)節(jié),提供對(duì)外訪問方法。
多態(tài):一個(gè)基類,可以有多個(gè)派生類,可以有不同的形態(tài)。
抽象:拋開細(xì)節(jié),只關(guān)注本質(zhì)特征的過程。
以上是面向?qū)ο蟮幕咎卣?,那么Python在面向?qū)ο蠓矫媸侨绾巫龅哪兀?/p>
創(chuàng)建類
如下所示:
- 使用 class 語句來創(chuàng)建一個(gè)新類,class 之后為類的名稱并以冒號(hào)結(jié)尾。
- Python的類,沒有大括號(hào)表示類的內(nèi)容范圍,而是通過縮進(jìn)來實(shí)現(xiàn)。
- 類的成員方法和普通方法的區(qū)別是,方法定義的第一個(gè)參數(shù)是self,表示類的實(shí)例,但在調(diào)用時(shí)不需要。
- 其中__init__方法為類的初始化方法,當(dāng)聲明對(duì)象時(shí),會(huì)調(diào)用對(duì)應(yīng)的方法。
- 其中__del__方法為析構(gòu)函數(shù),當(dāng)類被釋放時(shí)調(diào)用。
class Employee:
"""員工類"""
emp_count = 0 # 變量是一個(gè)類變量,它的值將在這個(gè)類的所有實(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)鍵字,類似于函數(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)與編譯型語言不同,如下所示:
emp.age = 17 # 添加一個(gè) 'age' 屬性
emp.age = 28 # 修改 'age' 屬性
del emp.age # 刪除 'age' 屬性
也可以通過Python的內(nè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)置類的一些屬性,如下所示:
# 內(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__)
類的屬性與方法
- 類的私有屬性,以雙下劃線開頭,只可以在類內(nèi)部通過self進(jìn)行訪問。
- 類的protected屬性,以下劃線開頭,只允許子類和自身調(diào)用。
- 在類的內(nèi)部,使用 def 關(guān)鍵字可以為類定義一個(gè)方法,與一般函數(shù)定義不同,類方法必須包含參數(shù) self,且為第一個(gè)參數(shù)
- 類的私有方法:以兩個(gè)下劃線開頭,聲明該方法為私有方法,不能在類的外部調(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í)例化的類訪問私有數(shù)據(jù),但你可以使用 object._className__attrName( 對(duì)象名._類名__私有屬性名 )訪問屬性,如下所示:
print(counter._JustCounter__secretCount)
類的繼承
面向?qū)ο蟮木幊處淼闹饕锰幹皇谴a的重用,實(shí)現(xiàn)這種重用的方法之一是通過繼承機(jī)制。通過繼承創(chuàng)建的新類稱為子類或派生類,被繼承的類稱為基類、父類或超類。
- Python中的繼承通過 class 子類名(父類名): 的格式實(shí)現(xiàn)。
- 子類可以調(diào)用父類的方法和定義自己的方法。
- 如果父類方法的功能不能滿足需求,子類可以重寫(overrides)父類的方法。
如下所示:Parent表示一個(gè)父類,擁有自己的屬性和方法。
class Parent:
"""定義父類"""
parentAttr = 100
def __init__(self):
print('調(diào)用父類的構(gòu)造函數(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表示一個(gè)子類,繼承自Parent,如下所示:
class Child(Parent):
"""定義子類"""
def __init__(self):
print('調(diào)用子類的構(gòu)造方法')
def childMethod(self):
print('調(diào)用子類方法')
def myMethod(self):
"""重寫Overrides父類方法"""
print('我是子類的MyMethod')
def __str__(self):
"""重寫方法,適合人閱讀"""
return 'str方法返回'
子類的實(shí)例化
如下所示:
c = Child() # 實(shí)例化子類對(duì)象
c.childMethod() # 調(diào)用子類方法
c.parentMethod() # 調(diào)用父類方法
c.setAttr(200) # 再次調(diào)用父類方法,設(shè)置屬性
c.getAttr() # 再次調(diào)用父類方法 獲取屬性
c.myMethod() # 調(diào)用的是子類的MyMethod
可以通過內(nèi)置函數(shù),判斷子類與類的關(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)注腳本之家其它相關(guān)文章!
相關(guān)文章
-
python時(shí)間序列數(shù)據(jù)轉(zhuǎn)為timestamp格式的方法
這篇文章主要介紹了python時(shí)間序列數(shù)據(jù)轉(zhuǎn)為timestamp格式的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧 2020-08-08
-
Python實(shí)現(xiàn)去除列表中重復(fù)元素的方法總結(jié)【7種方法】
今天小編就為大家分享一篇關(guān)于Python實(shí)現(xiàn)去除列表中重復(fù)元素的方法總結(jié)【7種方法】,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧 2019-02-02
-
python實(shí)現(xiàn)不同電腦之間視頻傳輸功能
這篇文章主要介紹了python實(shí)現(xiàn)不同電腦之間視頻傳輸,本文視頻傳輸實(shí)現(xiàn)的前提是確保發(fā)送端和接收端接在同一個(gè)局域網(wǎng)下,分為發(fā)送端和接收端,通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧 2021-06-06
-
python3+requests接口自動(dòng)化session操作方法
今天小編就為大家分享一篇python3+requests接口自動(dòng)化session操作方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧 2018-10-10
-
python中日期和時(shí)間格式化輸出的方法小結(jié)
這篇文章主要介紹了python中日期和時(shí)間格式化輸出的方法,實(shí)例總結(jié)了Python常見的日期與事件操作技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下 2015-03-03
-
Python學(xué)習(xí)之列表常用方法總結(jié)
這篇文章主要為大家介紹了Python中列表的幾個(gè)常用方法總結(jié),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python列表有一定幫助,需要的可以參考一下 2022-03-03
最新評(píng)論
概述
很多人接觸Python,都是從爬蟲開始,其實(shí)很多語言都可以做爬蟲,只是Python相對(duì)其他語言來說,更加簡(jiǎn)單而已。但是Python并不止于爬蟲,在人工智能,科學(xué)計(jì)算等方面的應(yīng)用更加廣泛。古人云:萬丈高樓平地起,要想有長(zhǎng)足的發(fā)展,打好基礎(chǔ)很重要,本文主要講解Python的面向?qū)ο笙嚓P(guān)知識(shí),僅供學(xué)習(xí)分享使用,如有不足之處,還請(qǐng)指正。
面向?qū)ο蟮奶卣?/strong>
類:用來描述相同事物的特征的集合,如:Person 類,表示人,具有人的屬性和特征。
對(duì)象:通過類定義的具體的實(shí)例,如:zhangsan 表示一個(gè)具體的人。
繼承:是指派生類繼承基類的方法和屬性,并具有自己屬性和特征,如:Man是Person的子類。
封裝:隱藏?cái)?shù)據(jù)和實(shí)現(xiàn)細(xì)節(jié),提供對(duì)外訪問方法。
多態(tài):一個(gè)基類,可以有多個(gè)派生類,可以有不同的形態(tài)。
抽象:拋開細(xì)節(jié),只關(guān)注本質(zhì)特征的過程。
以上是面向?qū)ο蟮幕咎卣?,那么Python在面向?qū)ο蠓矫媸侨绾巫龅哪兀?/p>
創(chuàng)建類
如下所示:
- 使用 class 語句來創(chuàng)建一個(gè)新類,class 之后為類的名稱并以冒號(hào)結(jié)尾。
- Python的類,沒有大括號(hào)表示類的內(nèi)容范圍,而是通過縮進(jìn)來實(shí)現(xiàn)。
- 類的成員方法和普通方法的區(qū)別是,方法定義的第一個(gè)參數(shù)是self,表示類的實(shí)例,但在調(diào)用時(shí)不需要。
- 其中__init__方法為類的初始化方法,當(dāng)聲明對(duì)象時(shí),會(huì)調(diào)用對(duì)應(yīng)的方法。
- 其中__del__方法為析構(gòu)函數(shù),當(dāng)類被釋放時(shí)調(diào)用。
class Employee: """員工類""" emp_count = 0 # 變量是一個(gè)類變量,它的值將在這個(gè)類的所有實(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)鍵字,類似于函數(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)與編譯型語言不同,如下所示:
emp.age = 17 # 添加一個(gè) 'age' 屬性 emp.age = 28 # 修改 'age' 屬性 del emp.age # 刪除 'age' 屬性
也可以通過Python的內(nè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)置類的一些屬性,如下所示:
# 內(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__)
類的屬性與方法
- 類的私有屬性,以雙下劃線開頭,只可以在類內(nèi)部通過self進(jìn)行訪問。
- 類的protected屬性,以下劃線開頭,只允許子類和自身調(diào)用。
- 在類的內(nèi)部,使用 def 關(guān)鍵字可以為類定義一個(gè)方法,與一般函數(shù)定義不同,類方法必須包含參數(shù) self,且為第一個(gè)參數(shù)
- 類的私有方法:以兩個(gè)下劃線開頭,聲明該方法為私有方法,不能在類的外部調(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í)例化的類訪問私有數(shù)據(jù),但你可以使用 object._className__attrName( 對(duì)象名._類名__私有屬性名 )訪問屬性,如下所示:
print(counter._JustCounter__secretCount)
類的繼承
面向?qū)ο蟮木幊處淼闹饕锰幹皇谴a的重用,實(shí)現(xiàn)這種重用的方法之一是通過繼承機(jī)制。通過繼承創(chuàng)建的新類稱為子類或派生類,被繼承的類稱為基類、父類或超類。
- Python中的繼承通過 class 子類名(父類名): 的格式實(shí)現(xiàn)。
- 子類可以調(diào)用父類的方法和定義自己的方法。
- 如果父類方法的功能不能滿足需求,子類可以重寫(overrides)父類的方法。
如下所示:Parent表示一個(gè)父類,擁有自己的屬性和方法。
class Parent: """定義父類""" parentAttr = 100 def __init__(self): print('調(diào)用父類的構(gòu)造函數(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表示一個(gè)子類,繼承自Parent,如下所示:
class Child(Parent): """定義子類""" def __init__(self): print('調(diào)用子類的構(gòu)造方法') def childMethod(self): print('調(diào)用子類方法') def myMethod(self): """重寫Overrides父類方法""" print('我是子類的MyMethod') def __str__(self): """重寫方法,適合人閱讀""" return 'str方法返回'
子類的實(shí)例化
如下所示:
c = Child() # 實(shí)例化子類對(duì)象 c.childMethod() # 調(diào)用子類方法 c.parentMethod() # 調(diào)用父類方法 c.setAttr(200) # 再次調(diào)用父類方法,設(shè)置屬性 c.getAttr() # 再次調(diào)用父類方法 獲取屬性 c.myMethod() # 調(diào)用的是子類的MyMethod
可以通過內(nèi)置函數(shù),判斷子類與類的關(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)注腳本之家其它相關(guān)文章!
相關(guān)文章
python時(shí)間序列數(shù)據(jù)轉(zhuǎn)為timestamp格式的方法
這篇文章主要介紹了python時(shí)間序列數(shù)據(jù)轉(zhuǎn)為timestamp格式的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08Python實(shí)現(xiàn)去除列表中重復(fù)元素的方法總結(jié)【7種方法】
今天小編就為大家分享一篇關(guān)于Python實(shí)現(xiàn)去除列表中重復(fù)元素的方法總結(jié)【7種方法】,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-02-02python實(shí)現(xiàn)不同電腦之間視頻傳輸功能
這篇文章主要介紹了python實(shí)現(xiàn)不同電腦之間視頻傳輸,本文視頻傳輸實(shí)現(xiàn)的前提是確保發(fā)送端和接收端接在同一個(gè)局域網(wǎng)下,分為發(fā)送端和接收端,通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-06-06python3+requests接口自動(dòng)化session操作方法
今天小編就為大家分享一篇python3+requests接口自動(dòng)化session操作方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-10-10python中日期和時(shí)間格式化輸出的方法小結(jié)
這篇文章主要介紹了python中日期和時(shí)間格式化輸出的方法,實(shí)例總結(jié)了Python常見的日期與事件操作技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-03-03Python學(xué)習(xí)之列表常用方法總結(jié)
這篇文章主要為大家介紹了Python中列表的幾個(gè)常用方法總結(jié),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python列表有一定幫助,需要的可以參考一下2022-03-03