[分享] Class method

看板Python作者 (littleq0903)時間15年前 (2010/09/26 02:19), 編輯推噓6(6010)
留言16則, 6人參與, 最新討論串1/1
這是最近遇到一個人的問題,我突然發現其實書上很少提及 光是decorator就很少有書在講了,但是我覺得有分享出來的需要 Q: Python如何define一個class method? 在Python裡面的話,定一個method的話,第一個引數都要吃一個self當做instance的連結 所以你要是class沒有實體化的話,呼叫一個method就會發生TypeError EX class: >>> class myClass(): ... def instMethod(self): ... return self ... def classMethod(): ... print 'call classMethod()' ... def classMethod2(self): ... print self 這時候你就會發現你不訂第一個引數self,他會做檢查引發TypeError不會讓你success, 因為他一定要傳一個引數進去,所以如果我們要定一個classmethod怎麼辦呢? 要利用"@classmethod"這個decorator >>> class myClass(): ... @classmethod ... def classMethod(cls): ... print cls 再去做呼叫看看 >>> myClass.classMethod() <class __main__.myClass at 0x466150> 就會發現第一個引數不傳instance了,改傳class 如果有版友還要補充,請多多指教^_^ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.119.135.70

09/26 08:08, , 1F
我之前接觸decorator發現他的功用真的五花八門,非常值得研究
09/26 08:08, 1F

09/26 10:46, , 2F
還有 @staticmethod 不傳 class 也不傳 instance
09/26 10:46, 2F

09/26 12:45, , 3F
可是@staticmethod拿得到private var嗎?
09/26 12:45, 3F

09/26 12:46, , 4F
decorator真的蠻重要的,我發現:
09/26 12:46, 4F

09/26 12:46, , 5F
偏向教學的書都不太講,偏向實作的書比較會講
09/26 12:46, 5F

09/26 13:52, , 6F
真的要好好研究 ...
09/26 13:52, 6F

09/28 10:24, , 7F
Python無private var吧 若說是class var的話
09/28 10:24, 7F

09/28 10:24, , 8F
ClassName.classVariable一樣可以用
09/28 10:24, 8F

09/28 12:25, , 9F
推推
09/28 12:25, 9F

09/29 13:32, , 10F
private var有阿?變數名稱加兩條底線在前面
09/29 13:32, 10F

10/01 20:20, , 11F
回樓上,那確實是private,但是可照樓上liangjr提的方法去讀
10/01 20:20, 11F

10/05 05:57, , 12F
變數名稱加雙底線只是naming convention
10/05 05:57, 12F

10/05 05:58, , 13F
但並沒有機制防止你從別的class存取OtherClass.__private
10/05 05:58, 13F

10/05 06:00, , 14F
或other_class_instance.__private 所以不能算是真的
10/05 06:00, 14F

10/05 06:00, , 15F
支援private variable或method
10/05 06:00, 15F

10/05 06:38, , 16F
err... OtherClass._OtherClass__private
10/05 06:38, 16F
文章代碼(AID): #1CdZqTzq (Python)
文章代碼(AID): #1CdZqTzq (Python)