<p>处理类时有两种不同类型的变量:实例变量和类变量。</p>
<p>类变量可以从类的所有实例以及类本身访问:</p>
<pre><code>>>> class Foo(object):
... class_var = {'one': 1}
...
>>> Foo.class_var
{'one': 1}
>>> a, b = Foo(), Foo()
>>> a.class_var
{'one': 1}
>>> b.class_var
{'one': 1}
>>> a.class_var is b.class_var
True # These are the same object
>>>
</code></pre>
<p>实例变量只能从分配给它们的特定实例访问:</p>
<pre><code>>>> class Foo(object):
... def __init__(self):
... self.instance_var1 = {'two': 2}
...
>>> foo = Foo()
>>> foo.instance_var2 = {'three': 3}
>>> foo.instance_var1
{'two': 2}
>>> foo.instance_var2
{'three': 3}
>>> Foo.instance_var1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: type object 'Foo' has no attribute 'instance_var1'
</code></pre>
<p>实例变量可以覆盖类变量:</p>
<pre><code>>>> class Foo(object):
... my_var = {'one': 1} # This a class variable
...
>>> foo = Foo()
>>> foo.my_var = {'two': 2} # Override class my_var with instance my_var
>>> foo.my_var
{'two': 2}
>>> Foo.my_var
{'one': 1}
>>> foo.__class__.my_var # But you can still access the class variable like this.
{'one': 1}
>>>
</code></pre>
<p>专门回答你的问题。如果要更改<em>类</em>变量,则必须从<em>类</em>而不是实例设置该变量,因此:</p>
<pre><code>dTest.d = {'blah': 'blah'}
</code></pre>
<p>或者</p>
<pre><code>a.__class__.d = {'blah': 'blah'}
</code></pre>
<p>如果你愿意的话</p>
<pre><code>a.d = {'blah': 'blah'}
</code></pre>
<p>您可以创建一个<code>a</code>的实例变量来隐藏或重写同名的类变量。</p>