Python中的類對(duì)象示例詳解
抽象特點(diǎn)
Python 一切皆對(duì)象,基于此概念,對(duì) 類 class 有以下特點(diǎn):
類與實(shí)例的屬性
類對(duì)象創(chuàng)建可選擇定義類屬性,創(chuàng)建實(shí)例對(duì)象時(shí),實(shí)例屬性自動(dòng)執(zhí)行類的__init__方法初始化
實(shí)例對(duì)象自動(dòng)繼承相應(yīng)的類屬性(如果有),但實(shí)例屬性優(yōu)先級(jí)更高
實(shí)例方法,類方法,靜態(tài)方法的參數(shù)
實(shí)例方法是一般函數(shù)但實(shí)例方法需要傳入self參數(shù)(與一般函數(shù)的區(qū)別)
類方法和靜態(tài)方法是通過(guò)裝飾器實(shí)現(xiàn)的函數(shù),類方法需要傳入cls參數(shù),靜態(tài)方法無(wú)需傳入self參數(shù)或者是cls參數(shù)(但也能傳入?yún)?shù))
其中self參數(shù)必須指向?qū)嵗龑?duì)象,cls參數(shù)指向定義的類對(duì)象(self與cls是約定俗成的,原則上可以用其它名字)
方法與函數(shù)
其中方法是在對(duì)象語(yǔ)境下的函數(shù),實(shí)例調(diào)用實(shí)例方法即調(diào)用方法,類調(diào)用實(shí)例方法即調(diào)用函數(shù)
具體細(xì)節(jié)
類舉例
class Toy(object): # 此處此類可理解為設(shè)計(jì)一個(gè)Toy的藍(lán)圖 # 賦值定義類屬性,記錄所有玩具數(shù)量 count = 0 def __init__(self, name): # 用于實(shí)例初始化 self.name = name # 類屬性 +1 Toy.count += 1 @classmethod # 此裝飾器表示是類方法,類方法無(wú)需創(chuàng)建實(shí)例對(duì)象即可調(diào)用,最為靈活 def show_toy_count(cls): print('玩具對(duì)象的數(shù)量 %d' % cls.count, cls) @staticmethod # 此裝飾器表示是靜態(tài)方法,靜態(tài)方法本質(zhì)上是封裝在類對(duì)象內(nèi)的的函數(shù),常用于測(cè)試 def hi(): print('Hello!') # 實(shí)例方法 def beybey(self): print('Sad!', self) # 創(chuàng)建實(shí)例對(duì)象 toy1 = Toy('樂(lè)高') toy1.hand = 2 toy2 = Toy('泰迪熊') toy3 = Toy('哥斯拉') print(toy1.name, toy2.name, toy3.name) # 點(diǎn)語(yǔ)法調(diào)用類方法與靜態(tài)方法,如:類名.方法 Toy.show_toy_count() Toy.hi() # 實(shí)例對(duì)象調(diào)用類方法時(shí),與類對(duì)象調(diào)用類方法無(wú)異,但實(shí)際上調(diào)用仍通過(guò)實(shí)例對(duì)象繼承的類對(duì)象 toy1.show_toy_count() print(toy1.hand) # 實(shí)例對(duì)象調(diào)用靜態(tài)方法時(shí),與類對(duì)象調(diào)用靜態(tài)方法無(wú)異,但實(shí)際上調(diào)用仍通過(guò)實(shí)例對(duì)象繼承的類對(duì)象 toy2.hi() # 實(shí)例對(duì)象調(diào)用實(shí)例方法,Python的解釋器內(nèi)部,當(dāng)我們調(diào)用toy3.beybey()時(shí),實(shí)際上Python解釋成Toy.beybey(toy3) toy3.beybey() # Toy.beybey() # 錯(cuò)誤語(yǔ)法,self必須指向?qū)嵗龑?duì)象,此處實(shí)例方法指向類對(duì)象而不是實(shí)例對(duì)象 Toy.beybey(toy3) # 類與其實(shí)例的類型和內(nèi)存地址 print(type(Toy), id(Toy), type(toy3), id(toy3))
輸出結(jié)果
樂(lè)高 泰迪熊 哥斯拉
玩具對(duì)象的數(shù)量 3 <class '__main__.Toy'>
Hello!
玩具對(duì)象的數(shù)量 3 <class '__main__.Toy'>
2
Hello!
Sad! <__main__.Toy object at 0x000001FD9F794D60>
Sad! <__main__.Toy object at 0x000001FD9F794D60>
<class 'type'> 2188806599664 <class '__main__.Toy'> 2188813880672
類方法與靜態(tài)方法舉例
class Cat: # 或者class Cat()不寫父對(duì)象形式定義類對(duì)象,會(huì)默認(rèn)繼承祖先object對(duì)象 name = '小敏' @classmethod def www(cls): print('%s 干嘛!' % cls.name) # cls.call() # 類方法可以調(diào)用靜態(tài)方法 @staticmethod def call(): print('喵喵~') Cat.name = '小敏臭弟弟' print(Cat.name) # Cat.www() # 靜態(tài)方法可以調(diào)用類方法 Cat.www() Cat.call() # 沒(méi)有定義實(shí)例方法可以創(chuàng)建實(shí)例對(duì)象繼承并使用其中方法 cat1 = Cat() cat1.www() cat1.call()
輸出結(jié)果
小敏 干嘛!
喵喵~
小敏臭弟弟
小敏臭弟弟 干嘛!
喵喵~
小敏臭弟弟
祖先對(duì)象中包含的基本方法
print(dir(object)) ['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
總結(jié)
類 class 是 Python 中最核心的對(duì)象,定義類通常要寫好類屬性,實(shí)例方法,類方法,靜態(tài)方法等幾部份。把類和繼承的類的實(shí)例比作函數(shù)中的主函數(shù)和子函數(shù),那么類屬性可認(rèn)為是全局變量,實(shí)例屬性可認(rèn)為是局部變量;把類看成葫蘆,實(shí)例方法則是方便我們照畫瓢的同時(shí),提供因地制宜的可能;類方式能夠使我們更高效的使用類的功能而靜態(tài)方法往往能幫助我們了解類的功能。
類 的各方法間并不是彼此毫不相干,而是有著很強(qiáng)的共性,具體使用時(shí)應(yīng)靈活運(yùn)用,不應(yīng)局限在抽象的定義之中。
到此這篇關(guān)于Python中類對(duì)象的文章就介紹到這了,更多相關(guān)Python類對(duì)象內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python梯度提升庫(kù)XGBoost解決機(jī)器學(xué)習(xí)問(wèn)題使用探究
XGBoost是一個(gè)流行的梯度提升庫(kù),特別適用于解決各種機(jī)器學(xué)習(xí)問(wèn)題,它在性能和速度上表現(xiàn)出色,常被用于分類、回歸、排序、推薦系統(tǒng)等應(yīng)用,本文將介紹XGBoost的基本原理、核心功能以及一些詳細(xì)的示例代碼2024-01-01Python+OpenCV實(shí)現(xiàn)六種常用圖像特效
這篇文章主要為大家介紹了用Python和OpenCV實(shí)現(xiàn)的六種常見圖像特效:圖像融合、灰度處理、馬賽克效果、浮雕效果、毛玻璃效果和顏色反轉(zhuǎn),需要的可以參考一下2022-05-05Python使用Qt5實(shí)現(xiàn)水平導(dǎo)航欄的示例代碼
本文主要介紹了Python使用Qt5實(shí)現(xiàn)水平導(dǎo)航欄的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03python?selenium模擬點(diǎn)擊問(wèn)題解決方案
這篇文章主要介紹了python?selenium模擬點(diǎn)擊問(wèn)題,涉及到安裝谷歌瀏覽器和瀏覽器驅(qū)動(dòng)的相關(guān)知識(shí)介紹,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05Python實(shí)現(xiàn)的遠(yuǎn)程文件自動(dòng)打包并下載功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)的遠(yuǎn)程文件自動(dòng)打包并下載功能,結(jié)合實(shí)例形式分析了Python使用spawn()方法執(zhí)行ssh、scp 命令實(shí)現(xiàn)遠(yuǎn)程文件的相關(guān)操作技巧,需要的朋友可以參考下2019-07-07django 解決自定義序列化返回處理數(shù)據(jù)為null的問(wèn)題
這篇文章主要介紹了django 解決自定義序列化返回處理數(shù)據(jù)為null的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05