1. 程式人生 > >Python類中例項方法、類方法及靜態方法的呼叫區別

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