# 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