Python中的靜態方法與類別成員

高洛峰
發布: 2017-03-01 11:56:38
原創
1448 人瀏覽過

前言

因為Python的水平目前一直是處於能用階段,平時寫的腳本使用的Python的寫法也比較的簡單,沒有寫過稍微大一點的項目。對Python中的類,類之間的組織關係,整個項目中類之間如何耦合還缺乏認識。打算讀別人寫的Python程式碼來學習Python在工程上的應用,提升自己的技術水準。選取的Python程式碼是Python爬蟲程式碼,github位址。這個代碼剛好是符合跳出我的舒適區的水平的代碼,因此很適合我目前的水平來學習。

在Python2.4之後,主要使用裝飾器來實作靜態方法和類別方法。

裝飾器使用@運算符,範例如下:

class Example:
 val1 = "Value 1"
 def __init__(self):
 self.val2 = "Value 2"

 @staticmethod
 def staticmd():
 print("静态方法,无法访问Value1和Value2")

 @classmethod
 def classmd(cls):
 print('类方法,类:'+str(cls)+",val1:"+cls.val1+",无法访问val2的值")


example = Example()
example.staticmd() #实例调用静态方法,无法访问实例变量val1和val2
example.classmd() #实例调用类方法,输出结果:类方法,类:<class &#39;__main__.Example&#39;>,val1:Value 1,无法访问val2的值
Example.classmd() #类调用类方法,输出结果:类方法,类:<class &#39;__main__.Example&#39;>,val1:Value 1,无法访问val2的值
example.val1 = "The instance value1 changed"
example.classmd() #类调用类方法,输出结果:类方法,类:<class &#39;__main__.Example&#39;>,val1:Value 1,无法访问val2的值
Example.val1 = "The class value2 changed"
example.classmd() #类调用类方法,输出结果:类方法,类:<class &#39;__main__.Example&#39;>,val1:The class value2 changed,无法访问val2的值
Example.classmd() #类调用类方法,输出结果:类方法,类:<class &#39;__main__.Example&#39;>,val1:The class value2 changed,无法访问val2的值
登入後複製

相信從上面的例子中,就可以很明顯地分辨出靜態方法和類別方法的差別了。

先是語法上面的差異:

  • 靜態方法不需要傳入self參數,類別成員方法需要傳入代表本類別的cls參數;

  • 靜態方法是無妨存取實例變數和類別變數的,類別成員方法無法存取實例變數但是可以存取類別變數

使用的區別:

由於靜態方法無法存取類別屬性,實例屬性,相當於一個相對獨立的方法,跟類別其實並沒有什麼關係。這樣說來,靜態方法就是在類別的作用域裡的函數而已。

更多Python中的靜態方法與類別成員相關文章請關注PHP中文網!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!