重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
创新互联www.cdcxhl.cn八线动态BGP香港云服务器提供商,新人活动买多久送多久,划算不套路!
10年积累的成都网站建设、网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先建设网站后付款的网站建设流程,更有老城免费网站建设让你可以放心的选择与我们合作。这篇文章主要介绍了python中静态方法和类方法有哪些区别,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。
区别:
静态方法装饰器下定义的方法属于函数(function);
类方法装饰器下定义的方法属于方法(method);
静态方法无需传入任何参数;
类方法传入的第一个参数必须是class本身cls;
静态方法与类方法一旦被调用,内存地址即确定。通过类调用和通过实例化对象调用的结果完全一样。
直接上代码:
# 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
运行结果:
> -------------------------------------------------------------------------------- > > -------------------------------------------------------------------------------- > >
普通方法传入的第一个参数必须是self(当然也可以不用self,官方要求尽量用self),self是指实例对象本身;静态方法无需传参;
类方法传入的第一个参数必须是class,是指类本身。
对比结果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。
感谢你能够认真阅读完这篇文章,希望小编分享python中静态方法和类方法有哪些区别内容对大家有帮助,同时也希望大家多多支持创新互联,关注创新互联-成都网站建设公司行业资讯频道,遇到问题就找创新互联,详细的解决方法等着你来学习!