python类方法和静态方法有啥用,python中类方法,类实例方法,静态方法有何区别
区别:
静态方法装饰器下定义的方法属于函数;
类装饰器下定义的方法属于方法;
静态方法不需要传入任何参数;
该方法传入的第一个参数必须是cls类本身;
一旦调用了静态方法和类方法,就确定了内存地址。通过类调用的结果与通过实例化的对象调用的结果完全相同。
相关:《Python教程》
直接装载代码:
#编码:utf-8
classApple:
deffun1(自身):
返回“正常”
@静态方法
deffun2():
返回“staticmethod”
@classmethod
deffun3(cls):
返回“classmethod”
printApple.fun1
printApple.fun2
printApple.fun3
打印-*80
苹果=苹果()
printapple.fun1
printapple.fun2
printapple.fun3
打印-*80
苹果1=苹果()
printapple1.fun1
printapple1.fun2
printapple1.fun3的运行结果:
unboundmethodApple.fun1
function 2 at0x 00000000022 fc4a 8
boundmethodclassobj . fun 3 of class _ _ main _ _ . apple at0x 0000000001 e7c 768
-
boundmethodapple . fun 1 of _ _ main _ _ . appleinstance at0x 00000000022 FAE 08
function 2 at0x 00000000022 fc4a 8
boundmethodclassobj . fun 3 of class _ _ main _ _ . apple at0x 0000000001 e7c 768
-
boundmethodapple . fun 1 of _ _ main _ _ . appleinstance at0x 00000000022 FAE 48
function 2 at0x 00000000022 fc4a 8
_ _ main _ _类的Bounethodclassobj.fun3of。apple at0x0000000001e7c768常用方法传入的第一个参数必须是self(当然不要求self,官方要求是尽量使用self)。self是指实例对象本身;静态方法不需要传递参数;
该方法传入的第一个参数必须是class,它引用类本身。
比较第1、5和9行的结果。
通过class调用fun1时,它是一个未绑定的方法,但是实例化apple和apple1后,它属于一个绑定的方法,实例化的apple和apple1由于属于不同的实例对象,所以内存地址不同。
比较第2、6和10行的结果。
静态fun2方法由类或实例化的对象调用,没有区别,都指向同一个内存地址。可以简单理解为静态方法与类或实例无关。一旦它被调用,它的内存地址就确定了。
比较第3、7和11行的结果。
方法fun3是类调用还是实例化对象调用,没有区别,都指向同一个内存地址。为什么?因为实例化的对象apple和apple1调用类方法fun3,所以传入的第一个参数是类本身apple,即Apple . fun 3=Apple 1 . fun 3=Apple . fun 3。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。