谨慎修改Python的类属性

Posted BlackMatrix

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了谨慎修改Python的类属性相关的知识,希望对你有一定的参考价值。

Python的类和类实例都是可变对象,可以随时给属性赋值,并且在原处修改。

在对类属性进行修改时需要特别小心,因为所有的类实例都继承共享类属性,除非实例本身存在和类属性同名的属性。对类属性进行修改,会影响到所有由这个类生成的实例。

class CA(object):

    cls_pre = aaaaa

    def __init__(self):
        self.obj_pre = bbbbb

a = CA()
b = CA()

print(a.cls_pre, a.obj_pre)
print(b.cls_pre, b.obj_pre)

CA.cls_pre = ccccc
c = CA()

d = CA()
d.cls_pre = ddddd

print(a.cls_pre, a.obj_pre)
print(b.cls_pre, b.obj_pre)
print(c.cls_pre, c.obj_pre)
print(d.cls_pre, d.obj_pre)

运行结果:

aaaaa bbbbb
aaaaa bbbbb
ccccc bbbbb
ccccc bbbbb
ccccc bbbbb
ddddd bbbbb

代码中,将类属性CA.cls_pre 重新赋值为 ‘ccccc‘。在修改类属性之后,不仅是后续创建的类实例c的cls_pre发生变化,在修改类属性之前的创建的类实例a、b的类属性cls_pre都发生了变化。

所以,当在class语句外修改类属性时,会导致所有由这个类创建的实例的类属性都随之变化,因为所有的实例都共享类属性CA.cls_pre。除非实例本身有同名的实例属性对类属性进行了覆盖,比如代码中的d.cls_pre = ‘ddddd‘。

 

以上是关于谨慎修改Python的类属性的主要内容,如果未能解决你的问题,请参考以下文章

11.按要求编写Java应用程序。 创建一个叫做机动车的类: 属性:车牌号(String),车速(int),载重量(double) 功能:加速(车速自增)减速(车速自减)修改车牌号,查询车的(代码片段

按要求编写Java应用程序。 创建一个叫做机动车的类: 属性:车牌号(String),车速(int),载重量(double) 功能:加速(车速自增)减速(车速自减)修改车牌号,查询车的载重量(代码片段

AJAX相关JS代码片段和部分浏览器模型

如何将 View 类中的代码片段移动到 OnAppearing() 方法?

python的类基础详解

python之路之前没搞明白4面向对象(封装)