網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
在開(kāi)發(fā)的時(shí)候, 可以使用類對(duì)方法進(jìn)行封裝,如果某一個(gè)方法需要訪問(wèn)到對(duì)象的實(shí)例屬性,可以把這個(gè)方法封裝成一個(gè)實(shí)例方法。如果某一個(gè)方法不需要訪問(wèn)對(duì)象的實(shí)例屬性,但是需要訪問(wèn)到類的類屬性,這個(gè)時(shí)候就可以考慮把這個(gè)方法封裝成一個(gè)類方法。一個(gè)實(shí)例方法, 一個(gè)類方法,這是兩種方法類型,但是在開(kāi)發(fā)中還有一種情況,如果要封裝的某一個(gè)方法,既不需要訪問(wèn)到對(duì)象的實(shí)例屬性,也不需要訪問(wèn)類的類屬性,這個(gè)時(shí)候就可以考慮把這個(gè)方法封裝成一個(gè)靜態(tài)方法。
在開(kāi)發(fā)中,如果類中的某個(gè)方法既不需要訪問(wèn)實(shí)例屬性或者調(diào)用實(shí)例方法,同時(shí)也不需要訪問(wèn)類屬性或者調(diào)用類方法,這個(gè)時(shí)候就可以把這個(gè)方法封裝成靜態(tài)方法。需要在def關(guān)鍵字上方增加一個(gè)靜態(tài)方法的修飾符,@staticmethod。
語(yǔ)法格式如下:
@staticmethod
def 靜態(tài)方法名():
pass
在Python里面靜態(tài)方法和我們平時(shí)寫的函數(shù)def是一樣的。唯一不同之處就是它可以存在于類中,不同實(shí)例化類也可以調(diào)用。
需要通過(guò)裝飾器?@staticmethod?來(lái)進(jìn)行修飾,?靜態(tài)方法既不需要傳遞類對(duì)象也不需要傳遞實(shí)例對(duì)象(形參沒(méi)有self/cls?)?。
靜態(tài)方法 也能夠通過(guò)?實(shí)例對(duì)象?和?類對(duì)象?去訪問(wèn)。
當(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ì)象訪問(wèn)?可以使?類訪問(wèn)
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): # 沒(méi)有 self
print(age, weight)
@classmethod
def get_info(cls):
# 通過(guò)類對(duì)象調(diào)用類方法
MyClass.tom(25, 66)
def my_info(self):
# 通過(guò)實(shí)例對(duì)象調(diào)用靜態(tài)方法
self.tom(26, 77)
# 通過(guò)類對(duì)象調(diào)用靜態(tài)方法
MyClass.tom(23, 55) # 23 55
# 實(shí)例化
mc = MyClass()
# 通過(guò)實(shí)例對(duì)象調(diào)用靜態(tài)方法
mc.tom(24, 65) # 24 65
# 通過(guò)類對(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)方法,無(wú)默認(rèn)參數(shù)
print("靜態(tài)方法")
# 實(shí)例化
mc = MyClass("tom")
# 調(diào)用實(shí)例方法
mc.get_info() # 實(shí)例方法
# 調(diào)用類方法,建議通過(guò) 類對(duì)象.類方法([實(shí)參]) 方法調(diào)用
MyClass.get_other() # 類方法
# 調(diào)用靜態(tài)方法,建議通過(guò) 類對(duì)象.類方法([實(shí)參]) 方法調(diào)用
MyClass.get_my_class() # 靜態(tài)方法
運(yùn)行結(jié)果:
原文鏈接:https://blog.csdn.net/weixin_44799217/article/details/125967662
相關(guān)推薦
- 2023-03-29 Python之sklearn數(shù)據(jù)預(yù)處理中fit(),transform()與fit_transfor
- 2023-04-19 C/C++實(shí)現(xiàn)內(nèi)存泄漏檢測(cè)詳解_C 語(yǔ)言
- 2022-12-24 如何計(jì)算?tensorflow?和?pytorch?模型的浮點(diǎn)運(yùn)算數(shù)_python
- 2022-06-14 golang連接redis庫(kù)及基本操作示例過(guò)程_Golang
- 2022-06-02 python文件與路徑操作神器?pathlib_python
- 2023-04-06 Android基準(zhǔn)配置文件Baseline?Profile方案提升啟動(dòng)速度_Android
- 2023-03-27 Python中反轉(zhuǎn)二維數(shù)組的行和列問(wèn)題_python
- 2023-04-24 Android布局控件View?ViewRootImpl?WindowManagerService關(guān)
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支