静态方法:staticmethod;类方法:classmethod

一、静态方法:staticmethod

1、在Python2.6中,通过一个类调取一个方法(未绑定方法,3.0中已经去掉了),必须手动传递一个实例才能调用。例如:

class Me:

    def  meth(self,x):

        print(x)

X=Me()

X.meth(2)     #正常调用,显示 2

Me.meth(X,2)   #正常调用,第一个参数X为实例参数,显示2

Me.meth(5 ,2)   #错误调用(3.0中正常显示2),需要第一参数为实例参数

解决办法:用staticmethod 静态方法,调用时不需要实例参数。

例如:

class Me:

    def  meth(self,x):

        print(x)

    meth=staticmethod(meth)

Me.meth(5,2)  #显示2,在2.6中可以正常调用,不需要实例参数

2、在3.0中,用实例调用类方法,往往把实例传递给方法,作为第一参数,比如:

class Me:

    def meth(x):

        print(x)

obj=Me()

Me.meth(2)  #显示2,3.0中,可以用类调用方法

obj.meth(2)   #显示错误,需要1个参数,默认会把实例作为第一参数,结果有2个参数。

解决办法:用静态方法:staticmeth 这样就不会把实例传递给方法。例如:

class Me:

    def meth(x):

        print(x)

    meth=staticmethod(meth)

obj=Me()

obj.meth(2)    #显示2,obj实例参数不会传递给方法meth

二、类方法:classmethod

1、在3.0中,如果用类调用方法,类不会传递给方法作为第一参数,用实例调用会把实例传递给方法做为第一参数。

例如:

class Me:

    def meth(cls,x):

        print(cls,x)

obj=Me()

obj.meth(2)   #显示<class '__main__.Me'>  2

Me.meth(2)  #显示错误,缺少参数,需要2个参数。类不作为第一参数;

解决办法:类方法:classmethod  不管是用实例调用还是类调用,都把类作为第一参数传递给类方法例如:

class Me:

    def meth(cls,x):

        print(cls,x)

    meth=classmethod(meth)

obj=Me()

obj.meth(2)   #显示<class '__main__.Me'> 2

Me.meth(2)  #显示<class '__main__.Me'> 2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值