Python字典类型作为实例变量

Rob*_*452 0 python

我想我疯了.我在repel(python3)中执行了以下操作:

class aClass():
  da = {}

>>> a = aClass()
>>> b = aClass()
>>> a.da['T'] = 'Hello'
>>> print(a.da)
{'T': 'Hello'}
>>> print(b.da)
{'T': 'Hello'}
>>>
Run Code Online (Sandbox Code Playgroud)

a和b是同一类的两个不同实例.我分配了一些东西,为什么它出现在b?

我做了同样的但是使用字符串类型,完全没问题.

以下作品:

>>> a={}
>>> b={}
>>> print(a)
{}
>>> print(b)
{}
>>> a['x']='x'
>>> print(a)
{'x': 'x'}
>>> print(b)
{}
Run Code Online (Sandbox Code Playgroud)

但是,这是完全相同的事情不是吗?

khe*_*ood 8

aClass.da是类属性,而不是实例属性.a.dab.da是相同的字典.

__init__而是在方法中创建字典.

class aClass:
    def __init__(self):
        self.da = {}
Run Code Online (Sandbox Code Playgroud)

(在Python 2中,应该是class aClass(object):.)

结果:

>>> a = aClass()
>>> b = aClass()
>>> a.da['T'] = 'Hello'
>>> print(a.da)
{'T': 'Hello'}
>>> print(b.da)
{}
Run Code Online (Sandbox Code Playgroud)