因为对方法和函数两者概念有些混淆,所以研究了一下,总结文章点Python函数(function)与方法(method)区别。后来顺带把静态方法和类方法也摸索了一下,稍微有了一些感觉。
直接上代码:
# coding:utf-8
class Apple:
def fun1(self):
return 'normal'
@staticmethod
def fun2():
return 'staticmethod'
@classmethod
def fun3(cls):
return 'classmethod'
print Apple.fun1
print Apple.fun2
print Apple.fun3
print "-"*80
apple = Apple()
print apple.fun1
print apple.fun2
print apple.fun3
print "-"*80
apple1 = Apple()
print apple1.fun1
print apple1.fun2
print apple1.fun3
运行结果:
>
--------------------------------------------------------------------------------
>
>
--------------------------------------------------------------------------------
>
>
对比结果1,5,9行
fun1通过class调用时,它是未绑定的方法,而实例化apple和apple1之后,它属于绑定的方法,且实例化后的apple和apple1内存地址不同,因为它们属于不同的实例对象。
对比结果2,6,10行
静态方法fun2通过class调用或者通过实例化后的对象调用,是没有任何区别的,全部都是指向同一块内存地址。可以简单的理解成静态方法与类或者实例没有任何关系,一旦调用后,它的内存地址即确定。
对比结果3,7,11行
类方法fun3通过class调用或者通过实例化后的对象调用,是没有任何区别的,全部都是指向同一块内存地址。为什么?因为实例化对象apple和apple1调用类方法fun3传入的第一个参数是类本身Apple,也就是说apple.fun3 = apple1.fun3 = Apple.fun3。
区别总结: