类属性version,可以通过类名和实例名访问之,都得到1.0。此时,通过类名修改version,都得到1.1。而如果通过实例名修改属性,发现此时创建了一个新的实例属性,其值为1.2,而类属性依旧为1.1。最后删除实例属性,发现通过实例名调用再次得到类属性值1.1。
类属性可变的情况下,即使使用实例名修改属性值,此时它还是类属性。所以试图通过实例名删除时,会得到异常。
当一个实例在类属性被修改后才创建,那么更新的值就将生效。类属性的修改会影响到所有的实例。
class Foo(object): version = 1.0f1 = Foo()print f1.version # 1.0Foo.version += 0.1print Foo.version # 1.1print f1.version # 1.1f2 = Foo()print f2.version # 1.1Foo.version += 0.1print f1.version # 1.2print f2.version # 1.2f1.version += 0.1f2.version += 0.2print Foo.version # 1.2print f1.version # 1.3print f2.version # 1.4Foo.version += 1print Foo.version # 2.2print f1.version # 1.3print f2.version # 1.4最后两段代码演示了,当通过实例名修改属性,相当于此时创建了一个新的实例属性。所以其后再对类属性进行修改(使用类名修改属性值),将不会影响到实例属性。
新闻热点
疑难解答