python中的静态方法、类方法解读

       先上代码吧。

# -*- coding: utf-8 -*-

class Tools():
#---------------------------线程锁--------------------------------------------------- 
    
    number = 0
    innum = 10
    def __init__(self, config):
        #self.logFilePath()
        print 'tools class'
    @staticmethod
    def getStaticNumber():
        Tools.number += 1
        return Tools.number + Tools.innum   #但是无法访问:self.innum,即实例属性
    @classmethod
    def getClassNumber(cls):
        cls.number += 2
        return cls.number       #但是无法访问:self.innum,即实例属性
    def getNumber(self):
        self.number += 3
        return self.number
    
if __name__ == '__main__':
    
    
    print Tools.getClassNumber()        #    2
    print Tools.getStaticNumber()       #    13
    tool = Tools(1) 
    print 'object'
    print tool.number                   #    3
    print tool.getNumber()              #    6    实例的函数并不能改变静态变量的值,但可以被静态变量赋值,不过它被赋值的时刻只有该实例被创建
    #print tool.getNumber()                        和被以一次使用时被静态变量赋值,而其他时候不被赋值
    print tool.getStaticNumber()        #    14
    print tool.getClassNumber()         #    6
    
    print Tools.getClassNumber()        #    8
    print Tools.getStaticNumber()       #    19
    print Tools.getClassNumber()        #    11
    print 'object'
    print tool.number                   #    6
    print tool.getNumber()              #    9
    
    tool = Tools(1)
    print tool.number                   #    11
    #print tool.getNumber()
    print tool.getStaticNumber()        #    22
    print tool.getClassNumber()         #    14
    
    print Tools.getClassNumber()        #    16
    print Tools.getStaticNumber()       #    27
    print Tools.getClassNumber()        #    19
    print tool.number                   #    19
    print tool.getNumber()              #    22
    
    print Tools.getClassNumber()        #    21
    print Tools.getStaticNumber()       #    32
    print Tools.getStaticNumber()       #    33
    print Tools.getClassNumber()        #    25
    print tool.number                   #    22
    print tool.getNumber()              #    25

总结:

1、实例的函数并不能改变静态变量的值,但可以被静态变量赋值,不过它被赋值的时刻只有该实例被创建和被以一次使用时被静态变量赋值,而其他时候不被赋值;

2、对于静态变量和类变量而言,其值不会受到实例的成员变量的影响(不会被其赋值),它们的值属于类;

3、静态方法和类方法都可以通过实例访问,和使用类访问的效果一样,因为静态方法和类方法不属于某一个实例,但是属于类;

4、静态方法和类方法都不可以访问实例的成员变量;

5、静态成员变量的改变,相当于这个类的改变,当重新为这个类生成一个实例对象的时候,此时获得的实例对象的变量就是此刻静态成员变量的值;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值