课程
/后端开发
/Python
/python进阶
class Person(object):
count = [0]
def __init__(self,name):
self.name=name
p1=Person('Sunny')
p1.count.append(1)
print Person.count
2017-08-05
源自:python进阶 4-7
正在回答
自己个人总结:类属性是列表时,append是列表内置方法(可用dir(list)来查找);所以相当于调用类方法来修改类属性;而不是通过实例修改的。。。表述欠佳,欢迎大家纠正
个人理解。
一般情况下,类属性在定义类时就确定了。但.append()是在原处修改,所以类属性就被改变了。但这并不说明类属性为列表或字典,实例修改就一定会发生变化。你可以试着把 p1.count.append(1) 改为p1.count = p1.count + [1],就会发现……
我自己的理解:这里你不是给实例添加了一个属性,而是直接调用了类属性,实例没有自己的新的添加属性,因此是直接修改的类属性
count = []
p1.count=[]
print p1.count
你试试这个,原来的那个实例的新属性没有覆盖,因此修改的是类属性的值,当实例有了新的覆盖属性是,就直接修改的是实例属性值,回答的不好,希望可以帮到你
qq_北冥之雪_0 提问者
举报
学习函数式、模块和面向对象编程,掌握Python高级程序设计
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号