python類方法和靜態方法詳解

類方法

需要用裝飾器@classmethod來標識其為類方法,對於類方法,第一個參數必須是類對象,一般以cls作為參數

使用場景

1當方法中需要使用類對象(如訪問私有類屬性)時,定義類方法

2類方法一般和類屬性配合使用

# 需要用裝飾器@classmethod來標識其為類方法,對於類方法,第一個參數必須是類對象,一般以cls作為參數
# 使用場景
# 1當方法中需要使用類對象(如訪問私有類屬性)時,定義類方法
# 2類方法一般和類屬性配合使用
class Dog(object):
    __tooth = 10
    t=10
#修改私有屬性
    @classmethod
    def getooth(cls, c):
        cls.__tooth = c
        return cls.__tooth
#得到私有屬性
    def get(self):
        return self.__tooth

ww = Dog()
cc=Dog()
result1=ww.get()            #10
result2 = ww.getooth(100)   #100
result3=ww.get()            #100
result4=cc.get()            #100成功修改私有屬性
print(result1, result2,result3,result4 )

如果去掉@classmethod後,就無法修改私有類屬性,result4 變成瞭10

self,和cla隻是名詞,可以更換其它名字,@不可去掉

靜態方法

1特點

需要通過修飾器@staticmethod來修飾,靜態方法既不需要傳遞實例對象,也不需要傳遞類對象(形參沒有sslf/cls)

靜態方法也可以通過類對象和實例對象去訪問

2使用場景

當方法中既不需要使用實例對象(如實例屬性,實例方法),也不需要使用類對象(如類屬性、類方法、創建實例等時,定義靜態方法

取消不需要的參數傳遞,有利於減少不必要的內存占用和性能消耗

#1特點
#需要通過修飾器@staticmethod來修飾,靜態方法既不需要傳遞實例對象,也不需要傳遞類對象(形參沒有sslf/cls)
#靜態方法也可以通過類對象和實例對象去訪問
#2使用場景
#當方法中既不需要使用實例對象(如實例屬性,實例方法),也不需要使用類對象(如類屬性、類方法、創建實例等時,定義靜態方法
#取消不需要的參數傳遞,有利於減少不必要的內存占用和性能消耗
class Dog(object):
    @staticmethod
    def static():
        print("這是一個靜態方法")
dog=Dog()
dog.static() #這是一個靜態方法
Dog.static() #這是一個靜態方法

總結

本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!

推薦閱讀: