Python的静态方法和类方法


可以直接被类或者类的实例调用。
1)静态方法无需传入self参数,类成员方法需传入代表本类的cls参数;
2)从第1条,静态方法是无法访问实例变量的,而类成员方法也同样无法访问实例变量,但可以访问类变量;
3)静态方法有点像函数工具库的作用,而类成员方法则更接近类似Java面向对象概念中的静态方法。

class MyClass:
    val1 = 'apple'
    def __init__(self):
        val2 = 'banana'     
    @staticmethod
    def staticmd():
        print val1+":"+val2     
    @classmethod
    def classmd1(cls):
        print cls.val2
    @classmethod
    def classmd2(cls):
        print cls.val1

>>> MyClass.staticmd()
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-325-e7a1dcd0e04d> in <module>()
----> 1 MyClass.staticmd()

<ipython-input-323-d82dece8064f> in staticmd()
      5     @staticmethod
      6     def staticmd():
----> 7         print val1+":"+val2
      8     @classmethod
      9     def classmd(cls):

NameError: global name 'val1' is not defined

>>> MyClass.classmd1()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-327-c83635b87838> in <module>()
----> 1 MyClass.classmd1()

<ipython-input-326-48fb9fb0f284> in classmd1(cls)
      8     @classmethod
      9     def classmd1(cls):
---> 10         print cls.val2
     11     @classmethod
     12     def classmd2(cls):

AttributeError: class MyClass has no attribute 'val2'

>>> MyClass.classmd2()
apple

静态方法:无法访问类属性、实例属性,相当于一个相对独立的方法,跟类其实没什么关系,换个角度来讲,其实就是放在一个类的作用域里的函数而已。
类成员方法:可以访问类属性,无法访问实例属性。上述的变量val1,在类里是类变量,在实例中又是实例变量,所以容易混淆。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值