詳解python中靜態(tài)方法staticmethod用法
在開發(fā)的時(shí)候, 可以使用類對(duì)方法進(jìn)行封裝,如果某一個(gè)方法需要訪問到對(duì)象的實(shí)例屬性,可以把這個(gè)方法封裝成一個(gè)實(shí)例方法。如果某一個(gè)方法不需要訪問對(duì)象的實(shí)例屬性,但是需要訪問到類的類屬性,這個(gè)時(shí)候就可以考慮把這個(gè)方法封裝成一個(gè)類方法。一個(gè)實(shí)例方法, 一個(gè)類方法,這是兩種方法類型,但是在開發(fā)中還有一種情況,如果要封裝的某一個(gè)方法,既不需要訪問到對(duì)象的實(shí)例屬性,也不需要訪問類的類屬性,這個(gè)時(shí)候就可以考慮把這個(gè)方法封裝成一個(gè)靜態(tài)方法。
在開發(fā)中,如果類中的某個(gè)方法既不需要訪問實(shí)例屬性或者調(diào)用實(shí)例方法,同時(shí)也不需要訪問類屬性或者調(diào)用類方法,這個(gè)時(shí)候就可以把這個(gè)方法封裝成靜態(tài)方法。需要在def關(guān)鍵字上方增加一個(gè)靜態(tài)方法的修飾符,@staticmethod。
語法格式如下:
@staticmethod def 靜態(tài)方法名(): pass
在Python里面靜態(tài)方法和我們平時(shí)寫的函數(shù)def是一樣的。唯一不同之處就是它可以存在于類中,不同實(shí)例化類也可以調(diào)用。
需要通過裝飾器 @staticmethod 來進(jìn)行修飾, 靜態(tài)方法既不需要傳遞類對(duì)象也不需要傳遞實(shí)例對(duì)象(形參沒有self/cls ) 。
靜態(tài)方法 也能夠通過 實(shí)例對(duì)象 和 類對(duì)象 去訪問。
當(dāng)方法中 既不需要使用實(shí)例對(duì)象 ( 如實(shí)例對(duì)象,實(shí)例屬性 ) , 也不需要使用類對(duì)象 ( 如類屬性、類方法、創(chuàng)建實(shí)例等) 時(shí),定義靜態(tài)方法
取消不需要的參數(shù)傳遞 ,有利于 減少不必要的內(nèi)存占存和性能消耗。
示例代碼:
class Dog(object): @staticmethod def info_print(): print('這是?個(gè)狗類,?于創(chuàng)建狗實(shí)例....') wangcai = Dog() # 靜態(tài)?法既可以使?對(duì)象訪問?可以使?類訪問 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() # 實(shí)例化調(diào)用靜態(tài)方法 obj = Static() obj.test_static()
運(yùn)行結(jié)果:
從上述代碼和運(yùn)行結(jié)果可以看出靜態(tài)方法可以直接被調(diào)用,且不用加任何參數(shù)、self也不要。靜態(tài)方法存在的意義其實(shí)就是讓函數(shù)歸類,緊耦合。
在類對(duì)象中定義的靜態(tài)方法:
class MyClass(object): # 在類對(duì)象中定義的靜態(tài)方法 @staticmethod def tom(age, weight): # 沒有 self print(age, weight) @classmethod def get_info(cls): # 通過類對(duì)象調(diào)用類方法 MyClass.tom(25, 66) def my_info(self): # 通過實(shí)例對(duì)象調(diào)用靜態(tài)方法 self.tom(26, 77) # 通過類對(duì)象調(diào)用靜態(tài)方法 MyClass.tom(23, 55) # 23 55 # 實(shí)例化 mc = MyClass() # 通過實(shí)例對(duì)象調(diào)用靜態(tài)方法 mc.tom(24, 65) # 24 65 # 通過類對(duì)象調(diào)用類方法 mc.get_info() # 25 66 mc.my_info() # 26 77
運(yùn)行結(jié)果:
實(shí)例方法、類方法、靜態(tài)方法綜合例子
class MyClass(object): def __init__(self, name): self.name = name def get_info(self): # 定義實(shí)例方法,有 self 參數(shù) print("實(shí)例方法") @classmethod def get_other(cls): # 定義實(shí)例方法,有 cls 參數(shù) print("類方法") @staticmethod def get_my_class(): # 定義靜態(tài)方法,無默認(rèn)參數(shù) print("靜態(tài)方法") # 實(shí)例化 mc = MyClass("tom") # 調(diào)用實(shí)例方法 mc.get_info() # 實(shí)例方法 # 調(diào)用類方法,建議通過 類對(duì)象.類方法([實(shí)參]) 方法調(diào)用 MyClass.get_other() # 類方法 # 調(diào)用靜態(tài)方法,建議通過 類對(duì)象.類方法([實(shí)參]) 方法調(diào)用 MyClass.get_my_class() # 靜態(tài)方法
運(yùn)行結(jié)果:
到此這篇關(guān)于詳解python中靜態(tài)方法staticmethod用法的文章就介紹到這了,更多相關(guān)python staticmethod內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- python中的classmethod與staticmethod
- 詳解Python中@staticmethod和@classmethod區(qū)別及使用示例代碼
- Python基于staticmethod裝飾器標(biāo)示靜態(tài)方法
- Python 類方法和實(shí)例方法(@classmethod),靜態(tài)方法(@staticmethod)原理與用法分析
- Python中staticmethod和classmethod的作用與區(qū)別
- python的staticmethod與classmethod實(shí)現(xiàn)實(shí)例代碼
- 基于python中staticmethod和classmethod的區(qū)別(詳解)
相關(guān)文章
Python+Django在windows下的開發(fā)環(huán)境配置圖解
Python+Django在windows下的開發(fā)環(huán)境配置圖解教程,需要的朋友可以參考下。2009-11-11一小時(shí)學(xué)會(huì)TensorFlow2之基本操作2實(shí)例代碼
這篇文章主要介紹了TensorFlow2的基本操作和實(shí)例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09Python填充任意顏色,不同算法時(shí)間差異分析說明
這篇文章主要介紹了Python填充任意顏色,不同算法時(shí)間差異分析說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05Python利用AutoGrad實(shí)現(xiàn)自動(dòng)計(jì)算函數(shù)斜率和梯度
AutoGrad 是一個(gè)老少皆宜的 Python 梯度計(jì)算模塊。對(duì)于大學(xué)生、機(jī)器學(xué)習(xí)愛好者而言,你只需要傳遞給它Numpy這樣的標(biāo)準(zhǔn)數(shù)據(jù)庫下編寫的損失函數(shù),它就可以自動(dòng)計(jì)算損失函數(shù)的導(dǎo)數(shù)(梯度)。本文將從普通斜率計(jì)算開始,介紹到如何只使用它來實(shí)現(xiàn)一個(gè)邏輯回歸模型2022-07-07