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
	


你可能感兴趣的:(Python)