詳解python中靜態(tài)方法staticmethod用法
在開發(fā)的時候, 可以使用類對方法進(jìn)行封裝,如果某一個方法需要訪問到對象的實例屬性,可以把這個方法封裝成一個實例方法。如果某一個方法不需要訪問對象的實例屬性,但是需要訪問到類的類屬性,這個時候就可以考慮把這個方法封裝成一個類方法。一個實例方法, 一個類方法,這是兩種方法類型,但是在開發(fā)中還有一種情況,如果要封裝的某一個方法,既不需要訪問到對象的實例屬性,也不需要訪問類的類屬性,這個時候就可以考慮把這個方法封裝成一個靜態(tài)方法。
在開發(fā)中,如果類中的某個方法既不需要訪問實例屬性或者調(diào)用實例方法,同時也不需要訪問類屬性或者調(diào)用類方法,這個時候就可以把這個方法封裝成靜態(tài)方法。需要在def關(guān)鍵字上方增加一個靜態(tài)方法的修飾符,@staticmethod。
語法格式如下:
@staticmethod
def 靜態(tài)方法名():
pass在Python里面靜態(tài)方法和我們平時寫的函數(shù)def是一樣的。唯一不同之處就是它可以存在于類中,不同實例化類也可以調(diào)用。
需要通過裝飾器 @staticmethod 來進(jìn)行修飾, 靜態(tài)方法既不需要傳遞類對象也不需要傳遞實例對象(形參沒有self/cls ) 。
靜態(tài)方法 也能夠通過 實例對象 和 類對象 去訪問。
當(dāng)方法中 既不需要使用實例對象 ( 如實例對象,實例屬性 ) , 也不需要使用類對象 ( 如類屬性、類方法、創(chuàng)建實例等) 時,定義靜態(tài)方法
取消不需要的參數(shù)傳遞 ,有利于 減少不必要的內(nèi)存占存和性能消耗。
示例代碼:
class Dog(object):
@staticmethod
def info_print():
print('這是?個狗類,?于創(chuàng)建狗實例....')
wangcai = Dog()
# 靜態(tài)?法既可以使?對象訪問?可以使?類訪問
wangcai.info_print()
Dog.info_print()運(yùn)行結(jié)果:

在類中編寫靜態(tài)方法和類的普通方法
class Static(object):
@staticmethod
def test_static():
print('I am staticmethod')
def test_def(self):
print('I am not staticmethod')
# 調(diào)用靜態(tài)方法
Static.test_static()
# 實例化調(diào)用靜態(tài)方法
obj = Static()
obj.test_static()運(yùn)行結(jié)果:

從上述代碼和運(yùn)行結(jié)果可以看出靜態(tài)方法可以直接被調(diào)用,且不用加任何參數(shù)、self也不要。靜態(tài)方法存在的意義其實就是讓函數(shù)歸類,緊耦合。
在類對象中定義的靜態(tài)方法:
class MyClass(object):
# 在類對象中定義的靜態(tài)方法
@staticmethod
def tom(age, weight): # 沒有 self
print(age, weight)
@classmethod
def get_info(cls):
# 通過類對象調(diào)用類方法
MyClass.tom(25, 66)
def my_info(self):
# 通過實例對象調(diào)用靜態(tài)方法
self.tom(26, 77)
# 通過類對象調(diào)用靜態(tài)方法
MyClass.tom(23, 55) # 23 55
# 實例化
mc = MyClass()
# 通過實例對象調(diào)用靜態(tài)方法
mc.tom(24, 65) # 24 65
# 通過類對象調(diào)用類方法
mc.get_info() # 25 66
mc.my_info() # 26 77運(yùn)行結(jié)果:

實例方法、類方法、靜態(tài)方法綜合例子
class MyClass(object):
def __init__(self, name):
self.name = name
def get_info(self): # 定義實例方法,有 self 參數(shù)
print("實例方法")
@classmethod
def get_other(cls): # 定義實例方法,有 cls 參數(shù)
print("類方法")
@staticmethod
def get_my_class(): # 定義靜態(tài)方法,無默認(rèn)參數(shù)
print("靜態(tài)方法")
# 實例化
mc = MyClass("tom")
# 調(diào)用實例方法
mc.get_info() # 實例方法
# 調(diào)用類方法,建議通過 類對象.類方法([實參]) 方法調(diào)用
MyClass.get_other() # 類方法
# 調(diào)用靜態(tài)方法,建議通過 類對象.類方法([實參]) 方法調(diào)用
MyClass.get_my_class() # 靜態(tài)方法運(yùn)行結(jié)果:

到此這篇關(guān)于詳解python中靜態(tài)方法staticmethod用法的文章就介紹到這了,更多相關(guān)python staticmethod內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python中的classmethod與staticmethod
- 詳解Python中@staticmethod和@classmethod區(qū)別及使用示例代碼
- Python基于staticmethod裝飾器標(biāo)示靜態(tài)方法
- Python 類方法和實例方法(@classmethod),靜態(tài)方法(@staticmethod)原理與用法分析
- Python中staticmethod和classmethod的作用與區(qū)別
- python的staticmethod與classmethod實現(xiàn)實例代碼
- 基于python中staticmethod和classmethod的區(qū)別(詳解)
相關(guān)文章
使用Python的urllib和urllib2模塊制作爬蟲的實例教程
這篇文章主要介紹了使用Python的urllib和urllib2模塊制作爬蟲的實例教程,展現(xiàn)了這兩個常用爬蟲制作模塊的基本用法,極度推薦!需要的朋友可以參考下2016-01-01
使用Python將word中的圖片進(jìn)行導(dǎo)出功能
這篇文章主要為大家詳細(xì)介紹了如何使用Python將word中的圖片進(jìn)行導(dǎo)出功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-01-01
python實現(xiàn)將文件夾內(nèi)的每張圖片批量分割成多張
這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)將文件夾內(nèi)的每張圖片批量分割成多張,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-07-07
Python實現(xiàn)加載及解析properties配置文件的方法
這篇文章主要介紹了Python實現(xiàn)加載及解析properties配置文件的方法,結(jié)合實例形式分析了Python針對properties配置文件的加載、讀取及解析相關(guān)操作技巧,需要的朋友可以參考下2018-03-03
淺談Python實現(xiàn)opencv之圖片色素的數(shù)值運(yùn)算和邏輯運(yùn)算
今天帶大家來學(xué)習(xí)的是關(guān)于Python的相關(guān)知識,文章圍繞著圖片色素的數(shù)值運(yùn)算和邏輯運(yùn)算展開,文中有非常詳細(xì)的的介紹及代碼示例,需要的朋友可以參考下2021-06-06

