Python中类变量与实例变量问题

来源:互联网 发布:太平天国失败 知乎 编辑:程序博客网 时间:2024/06/01 10:23

类变量被创建的实例共享么?答案是共享!

今天被一篇文章误导了,文章写到:类变量在创建实例时,会复制给实例,而本身不被共享。经过探究,这个是错的

贴下例子代码:

class A:    x = []    y = 0    def __init__(self):        pass    def add(self):        self.x.append('1')        self.y+=1      a=A() print a.x,a.yprint A.x,A.ya.add()print a.x,a.yprint A.x,A.yb=A() print b.x,b.yprint A.x,A.y

运行结果:

[] 0[] 0['1'] 1['1'] 0['1'] 0['1'] 0

Class中的变量x已经被修改了,Python中的机制为,创建实例后,如果调用a.x属性,会在实例中寻找,如果没有的话,会往上寻找类A,如果有,就直接调用类A的类变量。
例子中的self.y经过self.y += 1后已经创建了实例属性,而self.x的append操作并不会创建实例属性,从而导致python去A中寻找x并且直接修改,这里我们也清楚的看到了,类的变量是所有实例共享的。

解决此案例中类变量被修改问题:

class A:    x = []    y = 0    def __init__(self):        pass    def add(self):        self.x = list(self.x)        self.x.append('1')        self.y+=1      a=A() print a.x,a.yprint A.x,A.ya.add()print a.x,a.yprint A.x,A.yb=A() print b.x,b.yprint A.x,A.y

新建list x


有关解析文章:

https://www.cnblogs.com/lpworkstudyspace1992/p/6071355.html


阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 描写爬山的作文 腰间盘突出爬山 梦见爬山爬不上去 登山赛车 登山的好处 登山图片 denshan dengshan 登山人 登山 河南自驾游不爬山 2018四驱惠利爬山王转让 腰间盘突出能爬山吗 来大姨妈可以爬山吗 山羊为什么会爬山 腰椎间盘突出可以爬山吗 腰椎间盘突出能爬山吗 腰间盘突出可以爬山吗 爬服批发 爬爬服 婴儿爬服 短袖爬服 婴儿哈衣爬服连体衣 爬服 婴儿连体衣服 婴儿连体衣哈衣爬服 自动爬杆压面机 自动爬杆面条机 爬杆 爬架 猫爬架 爬架图片 爬架施工方案 自制猫爬架 建筑爬架网片 建筑爬架 爬架公司 爬架防护网片 爬架网厂家 建筑爬架公司 江苏爬架生产厂家