class Demo(object):
'''实例方法/类方法/静态方法的对比'''
num = 0 # 类属性
def defaultFun(self):
'''实例方法:必须实例化类之后才能被调用,它是要面向实例化对象的一个实例方法。'''
print (u'普通方法')
print (self)
print(self.num)
@classmethod
def classFun(cls):
'''类方法:它第一个参数必须是cls,并与class本身是绑定关系,它是属于类方法,且不属于实例方法,但可被实例对象调用
它不需要实例化就可以被类本身调用
'''
print (u'类方法')
print(cls)
print(cls.num) # 类方法调用类属性
Demo().defaultFun() # 类方法调用实例方法
Demo().staticFun() # 类方法调用静态方法
@staticmethod
def staticFun(*arg):
'''静态方法:它与任何对象都没有联系,等同于在class外定义的方法,它只属于函数
不传递传递默认self参数的方法(该方法也是可以直接被类调用的,但是这样做不标准)
'''
print (u'静态方法')
print (Demo.num) # 属性是可以直接用类本身调用的
if __name__ == '__main__':
demo = Demo()
print (demo) # <__main__.Demo object at 0x000001C989500358>
print (demo.defaultFun) # <bound method Demo.defualtFun of <__main__.Demo object at 0x000001C989500358>>
print (demo.classFun) # <bound method type.classFun of <class '__main__.Demo'>>
print (demo.staticFun) # <function staticFun at 0x000001C9894F9E48>
print (demo.defaultFun())
print (demo.classFun())
print (demo.staticFun())