Python类变量与成员变量

python 的类中,主要会使用的两种变量:类变量与成员变量。类变量是类所有实例化对象共有的,而成员变量是每个实例化对象自身特有的,下面通过两个小程序来说明一下。

1、

class A(object):
    def __init__(self):
        #aa为成员变量
        self.aa = 10

    @staticmethod
    def test(self):
        self.aa += -1
if __name__ == '__main__':
    x = A()
    y = A()
    #调用x
    x.test(x)
    print x.aa #输出9
    y.test(y)
    print x.aa #输出9
    print y.aa #输出9

2、

class A(object):
    #aa为类变量
    aa = 10

    @staticmethod
    def test(self):
        A.aa += -1

if __name__ == '__main__':
    x = A()
    y = A()
    x.test(x)
    print x.aa #输出9
    y.test(y)
    print x.aa #输出8
    print y.aa #输出8

从第2个程序可以看出,虽然x调用了test函数之后aa值为9,但是在y调用了test函数之后,x.aa也变为了8,而y的test执行也是基于x的修改之上了,它们共用的是同一个类变量。
在平时使用过程中,类变量需要注意以下一点 :

成员函数以 类名.变量名 方式引用,而如果我们在析构函数中这么引用,将会报异常:

"'NoneType' object has no attribute 'aa'" in method A.__del__ of <__main__.A object at 0x00000000023092B0>> ignored

我们可以在析构函数中以self.aa的方式去获得,不过很明显,这时的aa以成员变量的形式出现,这时对其进行的修改变只能针对它的对象本身,而不会影响到其他的类对象。我想,这样的设计应该更加符合析构函数的定义,否则当一个对象退出作用域时,对其他对象也将是一件特别危险的事。

你可能感兴趣的:(Python,python)