ref @ https://blog.csdn.net/handsomekang/article/details/9615239
cls 參數和 self 參數
cls 當前個類
self 當前這個類的實例
@staticmethod @ classmethod
一般來說,要使用某個類的方法,需要先實例化一個對象再調用方法。
而使用@staticmethod或@classmethod,就可以不需要實例化,直接類名.方法名()來調用。
這有利于組織代碼,把某些應該屬于某個類的函數給放到那個類里去,同時有利于命名空間的整潔。
既然@staticmethod和@classmethod都可以直接類名.方法名()來調用,那他們有什么區別呢
從它們的使用上來看,
- @staticmethod不需要表示自身對象的self和自身類的cls參數,就跟使用函數一樣。
- @classmethod也不需要self參數,但第一個參數需要是表示自身類的cls參數。
class
A
(
object
)
:
bar
=
1
def
foo
(
self
)
:
print
'foo'
@
staticmethod
def
static_foo
(
)
:
print
'static_foo'
print
A
.
bar
@
classmethod
def
class_foo
(
cls
)
:
print
'class_foo'
print
cls
.
bar
cls
(
)
.
foo
(
)
A
.
static_foo
(
)
A
.
class_foo
(
)
-
為什么static_foo里面少了一行(沒有調用A類的foo函數 ,這是因為沒有foo的實例)
- cls() 創建了這個類的一個臨時實例
- cls就可以當作這個類的別名用
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
