code1
class Foo(object):
x = 1.5
foo = Foo()
print Foo.x # 值为 1.5 类属性
print foo.x # 值为 1.5 ,实例属性(在实例属性没有的情况下,使用类属性)
foo.x = 1.7
print foo.x # 实例属性
print Foo.x # 实例属性的修改不会影响类属性(实例属性可以有效屏蔽类属性)
code2
#!/usr/bin/env python
# coding=utf-8
class Foo(object):
x = {1: 'hello'}
foo = Foo()
print foo.x # 值为{1: 'hello'}
print Foo.x # 值为{1: 'hello'}
foo.x[1] = 'world'
print foo.x # 值为{1: 'world'}
print Foo.x # 值为{1: 'world'}
问题: 为什么第一个代码段当类属性是不可变对象时(数字),修改实例属性,不会影响到类属性 而第二个代码段中,当类属性是可变对象时(字典),修改实例属性,导致类属性也改变了?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.