<p>好吧,我要附加这个答案,因为你说的是<code>class attributes</code>,而不是<code>instance attributes</code>。您可以使用<a href="https://docs.python.org/3.7/library/functions.html#setattr" rel="nofollow noreferrer">built-in function</a><code>setattr</code>:</p>
<blockquote>
<p>This is the counterpart of <code>getattr()</code>. The arguments are an <code>object</code>, a
<code>string</code> and an arbitrary value. The <code>string</code> may name an existing
attribute or a new attribute. The function assigns the value to the
attribute, provided the object allows it. For example, <code>setattr(x,
'foobar', 123)</code> is equivalent to <code>x.foobar = 123</code>.</p>
</blockquote>
<p>您可以这样做:</p>
<pre><code>class Joint:
spineX = 0.0
spineY = 0.0
spineZ = 0.0
s = '{"spineX":8.9,"spineY":7.7,"spineZ":9.9}'
o = json.loads(s)
for k in o.keys():
setattr(Joint, k, o[k])
print(Joint.spineX)
print(Joint.spineY)
print(Joint.spineZ)
</code></pre>
<p><strong>输出:</strong></p>
<pre><code>8.9
7.7
9.9
</code></pre>
<p>现在,<code>Joint</code>的每个新实例都将具有这些<code>class attribute</code>值。如果您这样做:</p>
<pre><code>x = Joint()
print(x.spineX)
print(x.spineY)
print(x.spineZ)
</code></pre>
<p>您还将获得:</p>
<pre><code>8.9
7.7
9.9
</code></pre>
<p>更有趣的是,使用<code>setattr()</code>甚至可以添加尚未定义的<code>class attributes</code>。例如:</p>
<pre><code>setattr(Joint, "spineA", 10.0)
print(Joint.spineA)
</code></pre>
<p>将<strong>输出<strong>:</p>
<pre><code>10.0
</code></pre>