类属性的小 case 们

xiaoxiao2021-02-28  95

1 类属性和实例属性

2 可变的类属性

1 类属性和实例属性

# coding=utf-8 class C: s = 100 c = C() cc = C() print "类属性值{},类属性地址{},实例属性值{},实例属性地址{}".format(C.s, id(C.s), c.s, id(c.s)) c.s = 150 print "类属性值{},类属性地址{},实例属性值{},实例属性地址{}".format(C.s, id(C.s), c.s, id(c.s)) C.s = 200 print "类属性值{},类属性地址{},实例属性值{},实例属性地址{}".format(C.s, id(C.s), c.s, id(c.s)) print "类属性值{},类属性地址{},实例属性值{},实例属性地址{}".format(C.s, id(C.s), cc.s, id(cc.s))

输出:

类属性值100,类属性地址31620912,实例属性值100,实例属性地址31620912 类属性值100,类属性地址31620912,实例属性值150,实例属性地址31621704 类属性值500,类属性地址40599784,实例属性值150,实例属性地址31621704

类属性值500,类属性地址40599784,实例属性值500,实例属性地址40599784

推论:

· 类属性通过类修改

· 初始实例属性和类属性指向同一个地址

· 修改类属性,地址改变,已经初始化的实例属性不变. 若仅初始化实例,没有初始化实例属性,则实例属性指向最新的类属性地址,值也与类属性相同

2 可变的类属性

# coding=utf-8 class C: l = {'k1': 'v1'} c = C() print "实例属性值{},实例属性地址{},类属性值{},类属性地址{}".format(C.l, id(C.l), c.l, id(c.l)) c.l['k2'] = 'v2' print "实例属性值{},实例属性地址{},类属性值{},类属性地址{}".format(C.l, id(C.l), c.l, id(c.l)) c.l['k1'] = 'v5' print "实例属性值{},实例属性地址{},类属性值{},类属性地址{}".format(C.l, id(C.l), c.l, id(c.l)) 输出:

实例属性值{'k1': 'v1'},实例属性地址40527800,类属性值{'k1': 'v1'},类属性地址40527800 实例属性值{'k2': 'v2', 'k1': 'v1'},实例属性地址40527800,类属性值{'k2': 'v2', 'k1': 'v1'},类属性地址40527800 实例属性值{'k2': 'v2', 'k1': 'v5'},实例属性地址40527800,类属性值{'k2': 'v2', 'k1': 'v5'},类属性地址40527800

推论:

·当类属性是字典或者列表时,可进行添加,和修改

转载请注明原文地址: https://www.6miu.com/read-68198.html

最新回复(0)