Python变量访问范围

来源:互联网 发布:java xml与json互转 编辑:程序博客网 时间:2024/06/05 02:17

case1:

# -*- coding: utf-8 -*-'''Created on 2016年1月29日@author: zhouzhou'''class MemberCounter(object):    members=-1    def count(self):        self.members+=1if __name__ == "__main__":    m1=MemberCounter()    m1.count()    print "m1.members is %d" %(m1.members)        m2=MemberCounter()    print "m2.members is %d" %(m2.members)        m2.count()    m2.count()    print "m1.members is %d" %(m1.members)    print "m2.members is %d" %(m2.members)
运行结果如下:



# -*- coding: utf-8 -*-'''Created on 2016年1月29日@author: zhouzhou'''class MemberCounter(object):    members=-1    def count(self):        MemberCounter.members+=1if __name__ == "__main__":    m1=MemberCounter()    m1.count()    print "m1.members is %d" %(m1.members)        m2=MemberCounter()    print "m2.members is %d" %(m2.members)        m2.count()    m2.count()    print "m1.members is %d" %(m1.members)    print "m2.members is %d" %(m2.members)

运行结果如下:


# -*- coding: utf-8 -*-'''Created on 2016年1月29日@author: zhouzhou'''class MemberCounter(object):    members=-1    def count(self):        MemberCounter.members+=1if __name__ == "__main__":    m1=MemberCounter()    m1.count()    print "m1.members is %d" %(m1.members)        m2=MemberCounter()    print "m2.members is %d" %(m2.members)        m1.members=8    m2.count()    m2.count()    print "m1.members is %d" %(m1.members)    print "m2.members is %d" %(m2.members)

运行结果如下:



# -*- coding: utf-8 -*-'''Created on 2016年1月29日@author: zhouzhou'''class MemberCounter(object):    members=-1    def count(self):        self.members+=1if __name__ == "__main__":    m1=MemberCounter()    m1.count()    print "m1.members is %d" %(m1.members)        print MemberCounter.members

运行结果如下:



case2:

# -*- coding: utf-8 -*-'''Created on 2016年1月29日@author: zhouzhou'''num=100class Test(object):        def printNum(self):        num=20        print num         if __name__ == "__main__":    test=Test()    print num    test.printNum()    print num

运行结果如下:



# -*- coding: utf-8 -*-'''Created on 2016年1月29日@author: zhouzhou'''num=100class Test(object):        def printNum(self):        global num        num=20        print num         if __name__ == "__main__":    test=Test()    print num    test.printNum()    print num
运行结果如下:


# -*- coding: utf-8 -*-'''Created on 2016年1月29日@author: zhouzhou'''num=100class Test(object):        def printNum(self):        print num         if __name__ == "__main__":    test=Test()    print num    test.printNum()    
运行结果如下:


# -*- coding: utf-8 -*-'''Created on 2016年1月29日@author: zhouzhou'''num=100class Test(object):        def printNum(self):        print num        num=200         if __name__ == "__main__":    test=Test()    print num    test.printNum()    





结论:

1、在一个类中定义变量,如果该变量定义为:类名.变量名 ——则此变量被所有实例共享。一旦实例重绑定变量后,则此变量为该实例所私有。此处定义的静态变量。若定义为:self.变量名——则此变量为各实例所私有。参考文章:python中的实例方法、静态方法、类方法、类变量和实例变量浅析

2、关于全局变量与局部变量,强烈建议不要出现同名的情况,局部变量在使用前需先定义,如要使用全局变量,可用global关键字声明。关于全局变量与局部变量的区别,可参考:Python语法基础——关于全局变量与局部变量




0 0
原创粉丝点击