[問題] 關於類別方法classmethod
想請問在以下程式碼中
定義了有兩個add方法的類別Cal
class Cal():
c = 100
def __init__(self):
pass
@classmethod
def add1(cls, a, b):
print (a + b + cls.c)
def add2(a, b):
print (a + b + Cal.c)
Cal.add1(5, 6)
Cal.add2(5, 6)
兩個函數都可以直接透過Cal.來呼叫
並且都會印出111
所以兩個都是類別方法
那add1上面加上修飾子@classmethod
引數又多寫一個cls
用這種方式來寫類別方法的用意為何呢?
這樣豈不是多此一舉?
煩請版上各位大神開釋
感激不盡!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.193.77.113
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1532007244.A.9EF.html
→
07/19 21:51,
7年前
, 1F
07/19 21:51, 1F
→
07/19 21:53,
7年前
, 2F
07/19 21:53, 2F
有跑過了! 是可以執行的! 結果會印出兩個111
※ 編輯: m06800825 (123.193.77.113), 07/19/2018 21:59:13
→
07/19 23:07,
7年前
, 3F
07/19 23:07, 3F
→
07/19 23:17,
7年前
, 4F
07/19 23:17, 4F
我是想要當作類別方法用不是實體方法 所以應該要不加self吧?
→
07/19 23:21,
7年前
, 5F
07/19 23:21, 5F
推
07/19 23:49,
7年前
, 6F
07/19 23:49, 6F
推
07/20 00:00,
7年前
, 7F
07/20 00:00, 7F
加@staticmethod好像是靜態方法不是類別方法
※ 編輯: m06800825 (123.193.77.113), 07/20/2018 00:22:48
→
07/20 00:22,
7年前
, 8F
07/20 00:22, 8F
→
07/20 00:23,
7年前
, 9F
07/20 00:23, 9F
→
07/20 00:24,
7年前
, 10F
07/20 00:24, 10F
→
07/20 00:27,
7年前
, 11F
07/20 00:27, 11F
→
07/20 00:27,
7年前
, 12F
07/20 00:27, 12F
可是剛把add1拿掉還是可以跑欸... 越來越混亂了QQ
※ 編輯: m06800825 (123.193.77.113), 07/20/2018 00:31:29
→
07/20 00:33,
7年前
, 13F
07/20 00:33, 13F
我是用python內建的IDLE跑的 換成用Spyder也可以跑~
※ 編輯: m06800825 (123.193.77.113), 07/20/2018 00:36:01
→
07/20 00:35,
7年前
, 14F
07/20 00:35, 14F
→
07/20 00:35,
7年前
, 15F
07/20 00:35, 15F
我是存成py檔來跑的沒錯
※ 編輯: m06800825 (123.193.77.113), 07/20/2018 00:37:01
→
07/20 00:36,
7年前
, 16F
07/20 00:36, 16F
→
07/20 00:36,
7年前
, 17F
07/20 00:36, 17F
→
07/20 00:37,
7年前
, 18F
07/20 00:37, 18F
→
07/20 00:37,
7年前
, 19F
07/20 00:37, 19F
→
07/20 00:43,
7年前
, 20F
07/20 00:43, 20F
推
07/20 00:44,
7年前
, 21F
07/20 00:44, 21F

→
07/20 00:44,
7年前
, 22F
07/20 00:44, 22F
→
07/20 00:44,
7年前
, 23F
07/20 00:44, 23F
喔喔所以主要是差在add2只能用類別呼叫而不能透過實例呼叫 add1則兩者都可呼叫
這樣理解應該沒錯吧?
→
07/20 00:44,
7年前
, 24F
07/20 00:44, 24F
我是直接學python3的新手XD 原來是新功能RRR
※ 編輯: m06800825 (123.193.77.113), 07/20/2018 00:48:43
→
07/20 00:46,
7年前
, 25F
07/20 00:46, 25F
→
07/20 00:46,
7年前
, 26F
07/20 00:46, 26F
→
07/20 00:46,
7年前
, 27F
07/20 00:46, 27F
→
07/20 00:46,
7年前
, 28F
07/20 00:46, 28F
→
07/20 00:47,
7年前
, 29F
07/20 00:47, 29F
了解!!! 感謝各位陪我這個初學者討論~
※ 編輯: m06800825 (123.193.77.113), 07/20/2018 00:50:56
→
07/20 00:51,
7年前
, 30F
07/20 00:51, 30F
→
07/20 00:51,
7年前
, 31F
07/20 00:51, 31F
所以如果用instance呼叫add2 就會因為多傳了一個self參數所以無法執行 應該沒錯吧XD
※ 編輯: m06800825 (123.193.77.113), 07/20/2018 00:54:58
→
07/20 00:54,
7年前
, 32F
07/20 00:54, 32F
→
07/20 00:54,
7年前
, 33F
07/20 00:54, 33F
→
07/20 00:55,
7年前
, 34F
07/20 00:55, 34F
→
07/20 00:55,
7年前
, 35F
07/20 00:55, 35F
→
07/20 00:56,
7年前
, 36F
07/20 00:56, 36F
→
07/20 00:57,
7年前
, 37F
07/20 00:57, 37F
恩恩終於搞懂差別在哪了QQ 謝謝s大!
※ 編輯: m06800825 (123.193.77.113), 07/20/2018 01:00:05
→
07/20 01:01,
7年前
, 38F
07/20 01:01, 38F
Python 近期熱門文章
PTT數位生活區 即時熱門文章