看板 Python 關於我們 聯絡資訊
這是最近遇到一個人的問題,我突然發現其實書上很少提及 光是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
apua:我之前接觸decorator發現他的功用真的五花八門,非常值得研究 09/26 08:08
ericsk:還有 @staticmethod 不傳 class 也不傳 instance 09/26 10:46
hsnu114444:可是@staticmethod拿得到private var嗎? 09/26 12:45
hsnu114444:decorator真的蠻重要的,我發現: 09/26 12:46
hsnu114444:偏向教學的書都不太講,偏向實作的書比較會講 09/26 12:46
eromoot:真的要好好研究 ... 09/26 13:52
liangjr:Python無private var吧 若說是class var的話 09/28 10:24
liangjr:ClassName.classVariable一樣可以用 09/28 10:24
neowaiter:推推 09/28 12:25
hsnu114444:private var有阿?變數名稱加兩條底線在前面 09/29 13:32
apua:回樓上,那確實是private,但是可照樓上liangjr提的方法去讀 10/01 20:20
liangjr:變數名稱加雙底線只是naming convention 10/05 05:57
liangjr:但並沒有機制防止你從別的class存取OtherClass.__private 10/05 05:58
liangjr:或other_class_instance.__private 所以不能算是真的 10/05 06:00
liangjr:支援private variable或method 10/05 06:00
liangjr:err... OtherClass._OtherClass__private 10/05 06:38