Python類中例項方法、類方法及靜態方法的呼叫區別
阿新 • • 發佈:2019-02-19
# usr/bin/env python # _*_ coding:utf-8 _*_ ''' 測試python類中: 例項方法,類方法,靜態方法及普通方法的呼叫方法區別 結論 1. instance建立時包含隱藏引數self,cls.因此呼叫時對四種method皆可直接呼叫; 2. class建立時包含隱藏引數cls.無self. 因此呼叫instance_method時需要傳入instance才能呼叫. 探討的不夠深入,僅此暫記以供自己後續思考. 用途:參考知乎 1. classmethod 主要用途是作為建構函式,為一個類建立一些預處理的例項. Python只有一個建構函式__new__,如果想要多種建構函式就很不方便, 2. staticmethod 主要用途是限定namespace,也就是說這個函式雖然是個普通的function,但是它只有這個class會用到,不適合作為module level的function。 這時候就把它作為staticmethod。 ''' class Method(object): def __init__(self): self.x = 1 self.y = 2 print 'test is starting...' def instance_method(self): print 'this is an instance_method.' print self @classmethod def class_method(cls): print 'this is a class_method.' print cls @staticmethod def static_method(): print 'this is a static_method.' # def commen_method(self, *args): # print 'this is a comment_method, the args are %s.' % args # print args if __name__ == '__main__': method = Method() # 測試例項對四種方法的呼叫方式 try: print 'Instance calling...' method.instance_method() method.class_method() method.static_method() # method.commen_method() except TypeError as e: print e.message # 測試類對四種方法的呼叫方式 try: print 'Class calling...' Method.instance_method(method) # 需要傳入例項 Method.class_method() Method.static_method() # Method.commen_method(method) except TypeError as e: print e.message