python类变量和实例变量之真相

本文通过两个示例详细解析了Python中的类变量与实例变量的区别。类变量被所有实例共享,而实例变量则为每个实例独立拥有。文章还探讨了如何通过实例修改类属性及实例属性的共享问题。

首先请看下以下一段代码:

class Test(object):

    num_of_instance = 0

    def __init__(self, name):
        self.name = name
        Test.num_of_instance += 1
    # end

if __name__ == '__main__':

    print Test.num_of_instance

    t1 = Test('jack')
    print t1.name , t1.num_of_instance

    t2 = Test('lucy')
    print t2.name , t2.num_of_instance
# end

运行输出为:

0
jack 1
lucy 2

如果上面还有疑惑就得努力点看下入门教程,come on!

思考个问题:类变量和实例变量到底有什么不同? ok,接下来请看下面一段代码:

class Test2(object):

      param = 1

      def __init__(self):
          pass

if __name__ == '__main__':
    # 通过实例来改变类属性?
    a = Test2()
    a.param = 2
    print a.param,Test2.param

    # 新添某个实例的属性能共享(出现什么问题)?
    a.ax = 12
    a.ay = 13
    b = Test2()
    print a.ax, a.ay
    print b.ax, b.ay
    print Test2.ax, Test2.ay

    # 新添类属性能共享?
    Test2.param2 = 'param2'
    print a.param2, b.param2

Afanty的讲解:

 其实,从名字就能看出来,python的类变量和实例变量的区别:

类变量:天下共享(读)

    是可在类的所有实例之间共享的值(也就是说,它们不是单独分配给每个实例的);

    例如例1中,num_of_instance 就是类变量,用于跟踪存在着多少个Test 的实例。

实例变量:为我独尊    

实例化之后,每个实例单独拥有的变量。




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值