类属性的小 case 们

来源:互联网 发布:湖南 福建卓知 编辑:程序博客网 时间:2024/06/05 18:59


1 类属性和实例属性

2 可变的类属性



1 类属性和实例属性

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


推论:

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








原创粉丝点击