|
发表于 2005-5-21 13:40:53
|
显示全部楼层
class test:
a=1
>>> test.a
1
>>> a=test()
>>> a.a
1
>>> b=test()
>>> b.a
1
>>> test.a=100 //这里的改变会影响所有的test类的实例
>>> a.a
100
>>> b.a
100
>>> a.a='a.a' // 如果改变你的实例对象,那么类的本身改变将不会在影响你的实例对象
>>> b.a='b.a' //同上
>>> test.a='test.a'
>>> test.a
'test.a'
>>> a.a
'a.a'
>>> b.a
'b.a'
这么解释,模块的名字空间实际是由字典实现的。一个新实例建立起来时,和类共享一个命名空间,因此类的变化会影响所有的实例。
下面看例子:
>>> class test2:
a=2
>>> test2.__dict__ //内置的__dict__输出名字空间
{'a': 2, '__module__': '__main__', '__doc__': None}
>>> ta=test2()
>>> ta.a
2
>>> ta.__dict__ //新实例这时没有自己的名空间,此时他共享类的名空间
{}
>>>test.a=3
>>> test.__dict__
{'a': 3, '__module__': '__main__', '__doc__': None} //类空间里的'a'值被修改。共享的实例也会被改变
>>> ta.a
3
>>> ta.a='ta.a' //改变你实例的值,同时实例拥有了自己的名空间,不在和类共享
>>> ta.__dict__ //名空间不在是空
{'a': 'ta.a'}
>>> test2.a='test.a' //从类改变
>>> test2.a
'test.a'
>>> ta.a //实例有自己的空间,不在受类的影响。
'ta.a'
>>> |
|