您好,登錄后才能下訂單哦!
這篇文章主要講解了“Python面向?qū)ο缶幊倘腴T實(shí)例分析”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Python面向?qū)ο缶幊倘腴T實(shí)例分析”吧!
面向過程編程:根據(jù)業(yè)務(wù)邏輯從上往下,將需要用到的功能代碼封裝到函數(shù)中,著重關(guān)注開發(fā)的步驟和過程,典型代碼為C語言(關(guān)注過程)
面向?qū)ο缶幊蹋簩⒑瘮?shù)或所需要的功能進(jìn)行分類和封裝,著重關(guān)注具體哪個(gè)類和函數(shù)來實(shí)現(xiàn)功能,典型代碼為Java、C++等語言(關(guān)注結(jié)果)
類(Class):用來描述具有相同屬性和方法的對(duì)象的集合,它定義了該集合中每個(gè)對(duì)象所共有的屬性和方法,對(duì)象是類的實(shí)例。
實(shí)例:也稱對(duì)象。通過類定義的初始化方法,賦予具體的值,成為一個(gè)”有血有肉的實(shí)體”。
類變量:類變量在整個(gè)實(shí)例化的對(duì)象中是公用的。類變量定義在類中且在函數(shù)體之外。類變量通常不作為實(shí)例變量使用。
數(shù)據(jù)成員:類變量或者實(shí)例變量, 用于處理類及其實(shí)例對(duì)象的相關(guān)的數(shù)據(jù)。
方法重寫:如果從父類繼承的方法不能滿足子類的需求,可以對(duì)其進(jìn)行改寫,這個(gè)過程叫方法的覆蓋(override),也稱為方法的重寫。
局部變量:定義在方法中的變量,只作用于當(dāng)前實(shí)例的類。
實(shí)例變量:在類的聲明中,屬性是用變量來表示的。這種變量就稱為實(shí)例變量,是在類聲明的內(nèi)部但是在類的其他成員方法之外聲明的。
方法:類中定義的函數(shù)。
方法重寫:如果從父類繼承的方法不能滿足子類的需求,可以對(duì)其進(jìn)行改寫,這個(gè)過程叫方法的覆蓋(override),也稱為方法的重 寫。
靜態(tài)方法:不需要實(shí)例化就可以由類執(zhí)行的方法。
類方法:類方法是將類本身作為對(duì)象進(jìn)行操作的方法。
面向?qū)ο笕筇匦裕?/strong>
封裝:將內(nèi)部實(shí)現(xiàn)包裹起來,對(duì)外透明,提供api接口進(jìn)行調(diào)用的機(jī)制。
繼承:即一個(gè)派生類(derived class)繼承父類(base class)的變量和方法。
多態(tài):根據(jù)對(duì)象類型的不同以不同的方式進(jìn)行處理。
對(duì)象是面向?qū)ο缶幊痰暮诵?,在使用?duì)象過程中,為了將具有共同特征和行為的一組對(duì)象抽象定義,形成類
類是一類事物,對(duì)象即是這一類事物的具體實(shí)現(xiàn),類具有相同的屬性和行為
類名:類的名稱
屬性:事物的特征
方法:具體做什么
擁有相同或類似屬性和行為的對(duì)象都可以抽象成一個(gè)類
創(chuàng)建類使用class關(guān)鍵字,帶上類名,再帶上括號(hào),括號(hào)內(nèi)為object,這樣的類稱為:新式類;也可以不帶括號(hào)和括號(hào)內(nèi)的object,這樣的類稱為:經(jīng)典類。
# 新式類 class Meeting2(object): pass # 經(jīng)典類 class Meeting2: pass
A = Meeting1() B
類方法的第一個(gè)參數(shù)必須是self(按慣例是self,也可以是其他名稱),調(diào)用時(shí)不必傳入。self代表類的實(shí)例
如下有個(gè)名為meeting的類,類中初始化了name、age、sex、address、attack等屬性,定義了introduction和attacked兩個(gè)方法:
class Meeting(object): """meeting類的類描述""" def __init__(self, name, age, sex, address, attack): """構(gòu)造函數(shù)""" self.name = name self.age = int(age) self.sex = sex self.address = address self.attack = int(attack) def introduction(self): print("姓名:{}".format(self.name)) print("年齡:{}".format(self.age)) print("性別:{}".format(self.sex)) print("地址:{}".format(self.address)) def attacked(self): print(f"{self.name}正在向您發(fā)起攻擊,攻擊力為{self.attack}!") def foreign_fun(): print("我是外部函數(shù)")
用法:
hasattr(object,name)
作用:檢查對(duì)象中是否包含指定屬性或方法
返回值:存在返回true、不存在返回false
# 實(shí)例化meeting類 Meeting = Meeting("張三", 20, "男", "南京", 108) # 獲取Meeting對(duì)象中是否存在name屬性 print(hasattr(Meeting, "name"))# True # 獲取Meeting對(duì)象中是否存在mobile屬性 print(hasattr(Meeting, "mobile"))# False # 獲取Meeting對(duì)象中是否存在attacked方法 print(hasattr(Meeting, "attacked"))# True
用法:
getattr(object,name[,default])
作用:獲取對(duì)象中指定屬性的屬性值
返回值:若存在,則返回該屬性的屬性值;若不存在,則返回指定內(nèi)容
# 實(shí)例化meeting類 Meeting = Meeting("張三", 20, "男", "南京", 108) # 獲取Meeting對(duì)象中name屬性的屬性值 print(getattr(Meeting, "name"))# 張三 # 獲取Meeting對(duì)象中kills屬性或方法的值,若不存在則返回指定內(nèi)容 print(getattr(Meeting, "kills", "未找到kills方法或?qū)傩?quot;))# 未找到kills方法或?qū)傩? # 獲取Meeting對(duì)象中attacked方法,返回值為函數(shù)地址 print(getattr(Meeting, "attacked")) # 使用getattr方法可以直接調(diào)用Meeting對(duì)象中的方法 f = getattr(Meeting, "attacked") f()
打印結(jié)果如下:
用法:
setattr(object,name,value)
作用:為object對(duì)象的指定屬性設(shè)置指定value
返回值:
# 實(shí)例化meeting類 Meeting = Meeting("張三", 20, "男", "南京", 108) # 將對(duì)象中name屬性的值改為“劉德華” setattr(Meeting, "name", "劉德華") # 獲取對(duì)象中name的屬性值 print(getattr(Meeting, "name"))# 劉德華 # 將對(duì)象外部的名為foreign_fun的方法引入對(duì)象內(nèi)部,并重新命名為“new_foreign_fun” setattr(Meeting, "new_foreign_fun", foreign_fun) # 獲取對(duì)象中是否存在foreign_fun的屬性或方法,返回值為True或False print(hasattr(Meeting, "foreign_fun"))# False # 獲取對(duì)象中是否存在new_foreign_fun的屬性或方法,返回值為True或False print(hasattr(Meeting, "new_foreign_fun"))# True
打印結(jié)果如下:
__init__()方法是Python中一種特殊的方法,被稱為構(gòu)造函數(shù)或初始化方法,當(dāng)創(chuàng)建這個(gè)類的實(shí)例時(shí)就會(huì)調(diào)用該方法。
class Meeting(object): """meeting類的類描述""" def __init__(self, name, age, sex, address, attack): """構(gòu)造函數(shù)""" self.name = name self.age = int(age) self.sex = sex self.address = address self.attack = int(attack) C = Meeting("張三", 20, "男", "南京", 108) print(C.name)# 張三 print(C.address)# 南京
當(dāng)刪除對(duì)象時(shí),Python解釋器會(huì)默認(rèn)調(diào)用一個(gè)方法__del__(),相當(dāng)于unittest框架中的tearDown()函數(shù)
def __del__(self): """析構(gòu)函數(shù)""" print("%s攻擊結(jié)束" % (self.name))
每調(diào)用一次對(duì)象,都會(huì)執(zhí)行一次__del__()方法
D = Meeting("張三", 20, "男", "南京", 108) # 計(jì)算當(dāng)前實(shí)例引用計(jì)數(shù),D引用一次,sys.getrefcount(D)引用一次 print(sys.getrefcount(D))# 2
D對(duì)象的引用計(jì)數(shù)為2次,一次是D引用,一次是sys.getrefcount所引用的
__str__方法需要返回一個(gè)字符串,當(dāng)做這個(gè)對(duì)象的描述信息,當(dāng)使用print輸出對(duì)象的時(shí)候,只要定義了__str__(self)方法,那么就會(huì)打印這個(gè)方法返回的數(shù)據(jù)
def __str__(self): """字符串函數(shù)""" return "我是Meeting類的字符串描述" # __str__():字符串函數(shù),定義__str__()方法時(shí),打印對(duì)象,打印的是__str__()方法的返回值,否則打印類的內(nèi)存地址 print(D)# 我是Meeting類的字符串描述
未定義__str__()方法時(shí),打印對(duì)象,打印的是Meeting類的內(nèi)存地址:
<__main__.meeting object="" at0x014a7748="">
定義了__str__()方法后,打印對(duì)象,打印的是__str__()方法的返回值:我是Meeting類的字符串描述
獲取類的屬性,包含一個(gè)字典,由類的數(shù)據(jù)屬性組成
# __dict__:獲取類的屬性,返回值為字典類型 print(D.__dict__) # {'name': '張三', 'age': 20, 'sex': '男', 'address': '南京', 'attack': 108}
class Meeting(object): """meeting1類的類描述""" # __doc__:獲取類的文檔字符串 print(D.__doc__) # meeting1類的類描述
# __name__:獲取類名 print(Meeting.__name__) # Meeting
類的全名是'__main__.clssName',如果類位于一個(gè)導(dǎo)入模塊mymod中,那么className.__module__等于mymod
from common.http_requests import HttpRequests # __module__:類定義所在的模塊 print(Meeting.__module__)# __main__ print(HttpRequests.__module__)# common.http_requests
Meeting類的路徑為__main__,而從common文件的http_requests文件中導(dǎo)入了HttpRequests類,打印其路徑,則為common.http_requests
獲取類的所有父類構(gòu)成元素(包含了一個(gè)由所有父類元素組成的元組)。例如下面有一個(gè)Song類,其繼承了父類Music,則獲取到的Song類的所有父類構(gòu)成元素為:(
class Music(object): pass class Song(Music): pass print(Song.__bases__)# (,)
本篇文章我們介紹了面向?qū)ο蟮南嚓P(guān)概念,下面來簡(jiǎn)單總結(jié)一下:
面向?qū)ο笙嚓P(guān)概念:
類和對(duì)象:類是一類事物,對(duì)象即是這一類事物的具體實(shí)現(xiàn),類具有相同的屬性和行為;
類的組成:類名、屬性、方法
帶object的為新式類,不帶object的為經(jīng)典類
獲取或添加對(duì)象屬性:
hasattr:檢查對(duì)象是否包含指定屬性或方法
getattr:獲取對(duì)象中指定屬性的屬性值
setattr:為object對(duì)象的name屬性設(shè)置指定value
魔法方法:
__init__() 構(gòu)造函數(shù):又叫初始化方法,用來初始化一些成員變量
__del__() 析構(gòu)函數(shù):每調(diào)用一次對(duì)象,都會(huì)執(zhí)行一次__del__()方法,相當(dāng)于Unittest框架中的tearDown
__str()__字符串函數(shù):返回一個(gè)字符串,當(dāng)做這個(gè)對(duì)象的描述信息
Python內(nèi)置屬性:
__dict__:獲取類的屬性,返回值為字典類型
__doc__:獲取類的文檔字符串
__name__:獲取類名
__module__:類定義所在的模塊
__bases__:獲取類的所有父類構(gòu)成元素,返回類型為元組
感謝各位的閱讀,以上就是“Python面向?qū)ο缶幊倘腴T實(shí)例分析”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Python面向?qū)ο缶幊倘腴T實(shí)例分析這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。