<p>因为在<code>__init__()</code>中为<code>player</code>分配属性,所以在<code>player</code>实例化之前不会创建属性。但是,在<code>soldier</code>类中,您试图在类创建时基于当时不存在的变量来设置<em>类</em>属性<em>,因为它们只存在于实例(不同类的实例,而不是更少的实例)。你知道吗</p>
<p>我认为您可能想做的是为<code>soldier</code>编写一个<code>__init__()</code>方法。(我还冒昧地按照政治公众人物第8章将你们的班级名称大写。这有助于跟踪哪些名称引用类,即用于构造对象的<em>模板</em>,以及哪些名称引用类的实例。)</p>
<pre><code>class Soldier(Player):
def __init__(self, username, age, weight, height, gender):
# call parent class to set up the standard player attributes
Player.__init__(self, username, age, weight, height, gender)
# now also define a soldier-specific attribute
self.strength = weight*height*2
</code></pre>
<p>然后实例化<code>Soldier</code>类而不是<code>Player</code>类,因为您需要一个士兵:</p>
<pre><code>character_obj = Soldier(player_username, player_age, player_weight, player_height, player_gender)
print character_obj.strength
</code></pre>
<p>我要进一步指出:</p>
<pre><code>class Soldier(Player):
</code></pre>
<p>不是函数调用。您没有将</em><code>Player</code>传递给<code>Soldier</code>。相反,你说<code>Soldier</code>是一种<em>类型的</em><code>Player</code>。因此,它具有<code>Player</code>的所有属性和功能(您无需再次指定,这就是整个继承点)以及您在<code>Soldier</code>中定义的任何其他属性和功能。但是,在声明<code>Soldier</code>时,您不能直接访问<code>Player</code>(或<code>Player</code>实例)的属性(通常不需要它们)。你知道吗</p>