# 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
Python類中實例方法、類方法及靜態方法的調用區別
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.