前言
因為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 '__main__.Example'>,val1:Value 1,无法访问val2的值 Example.classmd() #类调用类方法,输出结果:类方法,类:<class '__main__.Example'>,val1:Value 1,无法访问val2的值 example.val1 = "The instance value1 changed" example.classmd() #类调用类方法,输出结果:类方法,类:<class '__main__.Example'>,val1:Value 1,无法访问val2的值 Example.val1 = "The class value2 changed" example.classmd() #类调用类方法,输出结果:类方法,类:<class '__main__.Example'>,val1:The class value2 changed,无法访问val2的值 Example.classmd() #类调用类方法,输出结果:类方法,类:<class '__main__.Example'>,val1:The class value2 changed,无法访问val2的值
相信從上面的例子中,就可以很明顯地分辨出靜態方法和類別方法的差別了。
先是語法上面的差異:
靜態方法不需要傳入self參數,類別成員方法需要傳入代表本類別的cls參數;
靜態方法是無妨存取實例變數和類別變數的,類別成員方法無法存取實例變數但是可以存取類別變數
使用的區別:
由於靜態方法無法存取類別屬性,實例屬性,相當於一個相對獨立的方法,跟類別其實並沒有什麼關係。這樣說來,靜態方法就是在類別的作用域裡的函數而已。
更多Python中的靜態方法與類別成員相關文章請關注PHP中文網!