網站首頁 編程語言 正文
在開發的時候, 可以使用類對方法進行封裝,如果某一個方法需要訪問到對象的實例屬性,可以把這個方法封裝成一個實例方法。如果某一個方法不需要訪問對象的實例屬性,但是需要訪問到類的類屬性,這個時候就可以考慮把這個方法封裝成一個類方法。一個實例方法, 一個類方法,這是兩種方法類型,但是在開發中還有一種情況,如果要封裝的某一個方法,既不需要訪問到對象的實例屬性,也不需要訪問類的類屬性,這個時候就可以考慮把這個方法封裝成一個靜態方法。
在開發中,如果類中的某個方法既不需要訪問實例屬性或者調用實例方法,同時也不需要訪問類屬性或者調用類方法,這個時候就可以把這個方法封裝成靜態方法。需要在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
相關推薦
- 2022-10-12 pandas實現手機號號碼中間4位匿名化的示例代碼_python
- 2022-10-13 Python實現RLE格式與PNG格式互轉_python
- 2022-07-20 C語言深入探究直接插入排序與希爾排序使用案例講解_C 語言
- 2022-04-01 CentOS安裝Docker的方法_docker
- 2022-04-26 Swift踩坑實戰之一個字符引發的Crash_Swift
- 2022-11-09 Apifox?Echo學習curl?httpie?命令使用詳解_相關技巧
- 2022-06-02 Android?View的事件體系教程詳解_Android
- 2022-12-15 ORACLE中%TYPE和%ROWTYPE的使用詳解_oracle
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支