詳解Python中的靜態(tài)方法與類成員方法
前言
因?yàn)镻ython的水平目前一直是處于能用階段,平時(shí)寫的腳本使用的Python的寫法也比較的簡單,沒有寫過稍微大一點(diǎn)的項(xiàng)目。對(duì)Python中的類,類之間的組織關(guān)系,整個(gè)項(xiàng)目中類之間如何耦合還缺乏認(rèn)識(shí)。打算讀一讀別人寫的Python代碼來學(xué)習(xí)一下Python在工程中的應(yīng)用,提升自己的技術(shù)水平。選取的Python代碼是Python爬蟲代碼,github地址。這個(gè)代碼剛好是符合跳出我的舒適區(qū)的水平的代碼,因此很適合我目前的水平來學(xué)習(xí)。
在Python2.4之后,主要使用裝飾器來實(shí)現(xiàn)靜態(tài)方法和類方法。
裝飾器使用@操作符,例子如下:
class Example:
val1 = "Value 1"
def __init__(self):
self.val2 = "Value 2"
@staticmethod
def staticmd():
print("靜態(tài)方法,無法訪問Value1和Value2")
@classmethod
def classmd(cls):
print('類方法,類:'+str(cls)+",val1:"+cls.val1+",無法訪問val2的值")
example = Example()
example.staticmd() #實(shí)例調(diào)用靜態(tài)方法,無法訪問實(shí)例變量val1和val2
example.classmd() #實(shí)例調(diào)用類方法,輸出結(jié)果:類方法,類:<class '__main__.Example'>,val1:Value 1,無法訪問val2的值
Example.classmd() #類調(diào)用類方法,輸出結(jié)果:類方法,類:<class '__main__.Example'>,val1:Value 1,無法訪問val2的值
example.val1 = "The instance value1 changed"
example.classmd() #類調(diào)用類方法,輸出結(jié)果:類方法,類:<class '__main__.Example'>,val1:Value 1,無法訪問val2的值
Example.val1 = "The class value2 changed"
example.classmd() #類調(diào)用類方法,輸出結(jié)果:類方法,類:<class '__main__.Example'>,val1:The class value2 changed,無法訪問val2的值
Example.classmd() #類調(diào)用類方法,輸出結(jié)果:類方法,類:<class '__main__.Example'>,val1:The class value2 changed,無法訪問val2的值
相信從上面的例子中,就可以很明顯地分辨出靜態(tài)方法和類方法的區(qū)別了。
先是在語法上面的區(qū)別:
- 靜態(tài)方法不需要傳入self參數(shù),類成員方法需要傳入代表本類的cls參數(shù);
- 靜態(tài)方法是無妨訪問實(shí)例變量和類變量的,類成員方法無法訪問實(shí)例變量但是可以訪問類變量
使用的區(qū)別:
由于靜態(tài)方法無法訪問類屬性,實(shí)例屬性,相當(dāng)于一個(gè)相對(duì)獨(dú)立的方法,跟類其實(shí)并沒有什么關(guān)系。這樣說來,靜態(tài)方法就是在類的作用域里的函數(shù)而已。
總結(jié)
好了,以上就是這篇文章的全部內(nèi)容了,最后,如何在實(shí)際的項(xiàng)目中使用靜態(tài)方法和類方法,這個(gè)等一段時(shí)間有更深的體會(huì)再和大家交流吧。希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助。
- Python面向?qū)ο笾o態(tài)屬性、類方法與靜態(tài)方法分析
- python中的實(shí)例方法、靜態(tài)方法、類方法、類變量和實(shí)例變量淺析
- python的類方法和靜態(tài)方法
- 淺談python中的實(shí)例方法、類方法和靜態(tài)方法
- Python實(shí)例方法、類方法、靜態(tài)方法的區(qū)別與作用詳解
- 深入解析python中的實(shí)例方法、類方法和靜態(tài)方法
- Python探索之靜態(tài)方法和類方法的區(qū)別詳解
- Python3.0中普通方法、類方法和靜態(tài)方法的比較
- Python 實(shí)例方法、類方法、靜態(tài)方法的區(qū)別與作用
- Python 面向?qū)ο箪o態(tài)方法、類方法、屬性方法知識(shí)點(diǎn)小結(jié)
相關(guān)文章
Pycharm設(shè)置utf-8自動(dòng)顯示方法
今天小編就為大家分享一篇Pycharm設(shè)置utf-8自動(dòng)顯示方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-01-01
pytorch中torch.topk()函數(shù)的快速理解
我們?cè)谧龇诸愃惴〞r(shí),時(shí)常見到@acc1和@acc5的情況,@acc1比較容易實(shí)現(xiàn),但是一直苦于@acc5算法的實(shí)現(xiàn),在此為大家提供一種@topk的實(shí)現(xiàn)方法,這篇文章主要給大家介紹了關(guān)于pytorch中torch.topk()函數(shù)的快速理解,需要的朋友可以參考下2022-02-02
Flask登錄注冊(cè)項(xiàng)目的簡單實(shí)現(xiàn)
一個(gè)簡單的用戶注冊(cè)和登錄的頁面,涉及到驗(yàn)證,數(shù)據(jù)庫存儲(chǔ)等等,本文主要介紹了Flask登錄注冊(cè)項(xiàng)目的簡單實(shí)現(xiàn),從目錄結(jié)構(gòu)開始,感興趣的可以了解一下2021-05-05
Python錯(cuò)誤NameError:name?'X'?is?not?defined的解決方法
這篇文章主要給大家介紹了關(guān)于Python錯(cuò)誤NameError:name?‘X‘?is?not?defined的解決方法,這是最近工作中遇到的一個(gè)問題,文中通過實(shí)例代碼將解決的方法介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03
Python并發(fā)concurrent.futures和asyncio實(shí)例
這篇文章主要介紹了Python并發(fā)concurrent.futures和asyncio實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05
Django實(shí)戰(zhàn)之用戶認(rèn)證(用戶登錄與注銷)
這篇文章主要介紹了Django實(shí)戰(zhàn)之用戶認(rèn)證(用戶登錄與注銷),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-07

