日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

詳解python中靜態方法staticmethod用法_python

作者:IT之一小佬 ? 更新時間: 2022-09-17 編程語言

在開發的時候, 可以使用類對方法進行封裝,如果某一個方法需要訪問到對象的實例屬性,可以把這個方法封裝成一個實例方法。如果某一個方法不需要訪問對象的實例屬性,但是需要訪問到類的類屬性,這個時候就可以考慮把這個方法封裝成一個類方法。一個實例方法, 一個類方法,這是兩種方法類型,但是在開發中還有一種情況,如果要封裝的某一個方法,既不需要訪問到對象的實例屬性,也不需要訪問類的類屬性,這個時候就可以考慮把這個方法封裝成一個靜態方法。

在開發中,如果類中的某個方法既不需要訪問實例屬性或者調用實例方法,同時也不需要訪問類屬性或者調用類方法,這個時候就可以把這個方法封裝成靜態方法。需要在def關鍵字上方增加一個靜態方法的修飾符,@staticmethod。

語法格式如下:

@staticmethod
def 靜態方法名():
    pass

在Python里面靜態方法和我們平時寫的函數def是一樣的。唯一不同之處就是它可以存在于類中,不同實例化類也可以調用。

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

靜態方法 也能夠通過?實例對象?和?類對象?去訪問。

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

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

?示例代碼:

class Dog(object):
    @staticmethod
    def info_print():
        print('這是?個狗類,?于創建狗實例....')
 
 
wangcai = Dog()
# 靜態?法既可以使?對象訪問?可以使?類訪問
wangcai.info_print()
Dog.info_print()

運行結果:

在類中編寫靜態方法和類的普通方法

class Static(object):
    @staticmethod
    def test_static():
        print('I am staticmethod')
 
    def test_def(self):
        print('I am not staticmethod')
 
 
#  調用靜態方法
Static.test_static()
 
#  實例化調用靜態方法
obj = Static()
obj.test_static()

運行結果:

從上述代碼和運行結果可以看出靜態方法可以直接被調用,且不用加任何參數、self也不要。靜態方法存在的意義其實就是讓函數歸類,緊耦合。

在類對象中定義的靜態方法:

class MyClass(object):
    # 在類對象中定義的靜態方法
    @staticmethod
    def tom(age, weight):  # 沒有 self
        print(age, weight)
 
    @classmethod
    def get_info(cls):
        # 通過類對象調用類方法
        MyClass.tom(25, 66)
 
    def my_info(self):
        # 通過實例對象調用靜態方法
        self.tom(26, 77)
 
 
# 通過類對象調用靜態方法
MyClass.tom(23, 55)  # 23 55
 
# 實例化
mc = MyClass()
 
# 通過實例對象調用靜態方法
mc.tom(24, 65)  # 24 65
 
# 通過類對象調用類方法
mc.get_info()  # 25 66
 
mc.my_info()  # 26 77

運行結果:

實例方法、類方法、靜態方法綜合例子

class MyClass(object):
    def __init__(self, name):
        self.name = name
 
    def get_info(self):  # 定義實例方法,有 self 參數
        print("實例方法")
 
    @classmethod
    def get_other(cls):  # 定義實例方法,有 cls 參數
        print("類方法")
 
    @staticmethod
    def get_my_class():  # 定義靜態方法,無默認參數
        print("靜態方法")
 
 
# 實例化
mc = MyClass("tom")
 
# 調用實例方法
mc.get_info()  # 實例方法
 
# 調用類方法,建議通過 類對象.類方法([實參]) 方法調用
MyClass.get_other()  # 類方法
 
# 調用靜態方法,建議通過 類對象.類方法([實參]) 方法調用
MyClass.get_my_class()  # 靜態方法

運行結果:

原文鏈接:https://blog.csdn.net/weixin_44799217/article/details/125967662

欄目分類
最近更新