Python類中實例方法、類方法及靜態方法的調用區別

# 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
	


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章