網站首頁 編程語言 正文
在python類當中,經常會遇到@classmethod和@staticmethod這兩個裝飾器,那么到底它們的區別和作用是啥子呢?具體來看下。
- @classmethod :默認有一個cls參數,用類或對象都可以調用。
- @staticmethod:靜態方法,無默認參數,用類和對象都可以調用。
1.@staticmethod:
我們看下代碼:
class A:
def f1(x):
print(x)
A.f1(2) # 2 類.函數
創建一個類,通過類調用函數。
class A:
@staticmethod
def f1(x):
print(x)
A.f1(2) # 2 類.靜態方法
A().f1(2) # 2 對象.靜態方法 這種情況下是可以執行的,如果上述f1沒有被staticmethod裝飾那么就會報錯?。?!
創建一個類,通過類調用函數。同時,因為該方法被staticmethod裝飾器裝飾了,那么通過對象.方法也是可以調用的。
所以在類中,通過@staticmethod裝飾的函數,可以直接被類調用,也可以被實例化后的對象調用!!!
同時,發現@staticmethod裝飾的函數根本不需要傳遞self這個參數。因為被@staticmethod裝飾的函數是直接綁定在類上而不是對象上。
2.@classmethod:
class A:
@classmethod
def f1(cls,x):
print(x)
A.f1(2) # 2 類.方法
A().f1(2) # 2 對象.方法
創建一個類,通過類調用函數。同時,因為該方法被classmethod裝飾器裝飾了,那么通過對象.方法也是可以調用的。但注意,在被裝飾方法中,必須傳遞cls參數!??!
class B:
name = 'bruce'
age = 16
@classmethod
def f1(cls,x):
print(x)
print(cls.age)
print(cls.name)
B().f1(1)
# 1
# 16
# bruce
上述中,說明被classmethod裝飾后的方法,通過cls參數,在該方法中,可以調用該類的屬性。
class C:
@classmethod
def f1(cls,x):
print(x)
cls().f2()
def f2(self):
print('hello world')
C.f1(1) 或者 C().f1(1)# 1<br># hello world
上述中,說明被classmethod裝飾后的方法,通過cls參數,在該方法中,可以調用該類的其他方法。
所以在類中,通過@classmethod裝飾的函數,首先在方法中必須傳遞第一個參數cls, 該函數可以被類直接調用,也可以被對象調用?。。?/p>
同時,因為傳遞了一個cls,所以可以調用類中的其他屬性和方法。
原文鏈接:https://www.cnblogs.com/shaoyishi/p/16790680.html
相關推薦
- 2022-09-21 Flutter定義tabbar底部導航路由跳轉的方法_Android
- 2022-05-25 Entity?Framework?Core使用控制臺程序生成數據庫表_實用技巧
- 2022-06-11 FreeRTOS進階之任務切換完全分析_操作系統
- 2022-05-05 Android開發之自定義加載動畫詳解_Android
- 2022-07-18 springboot解決Invalid character found in the request
- 2022-07-09 Docker項目啟動報設備忙錯誤
- 2022-07-21 Centos7修改主機名hostname
- 2022-09-27 C#校驗時間格式的場景分析_C#教程
- 最近更新
-
- 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同步修改后的遠程分支