<p>假设你所说的<code>quips</code>是指<code>quotes</code>,你实际上可以使用其中任何一种,但它们的效果略有不同。你知道吗</p>
<p>如果您使用<code>Death.quotes</code>,这将在类<code>Death</code>中查找名为<code>quotes</code>的属性并使用它。你知道吗</p>
<p>如果您使用<code>self.quotes</code>,这将首先在实例<code>self</code>内查找,然后在实例<code>self</code>的类内查找名为<code>quotes</code>的属性。在您的特定示例中,这与调用<code>Death.quotes</code>的行为相同,因为<code>self</code>是类<code>Death</code>的一个实例,但是有一些关键的区别您应该注意:</p>
<p>1)如果您的实例变量<code>self</code>也有一个名为<code>quotes</code>的属性,那么它将被访问,而不是使用与以下示例相同的名称访问class属性:</p>
<pre><code>class Death(Scene):
quotes = [
'some awesome quote',
]
def __init__(self):
sef.quotes = ['foo']
def some_method(self):
# This will print out 'some awesome quote'
print Death.quotes[0]
# This will print out 'foo'
print self.quotes[0]
</code></pre>
<p>2)如果<code>self</code>是<code>Death</code>的子类的实例,并且该子类定义了它自己的类变量名<code>quotes</code>,那么使用<code>self.quotes</code>将使用attribute,如下面的示例所示。你知道吗</p>
<pre><code>class Death(Scene):
quotes = [
'some awesome quote',
]
def some_method(self):
print self.quotes[0]
class DeathChild(Death):
quotes = [
'not so awesome quote'
]
instance1 = Death()
instance2 = DeathChild()
# This will print out 'some awesome quote'
instance1.some_method()
# This will print out 'not so awesome quote'
instance2.some_method()
</code></pre>
<p>既然您已经了解了这一点,我将告诉您,通过子类化支持扩展实际上(通常)是一件好事,我自己也会使用<code>self.quotes</code>而不是<code>Death.quotes</code>,但了解原因很重要。你知道吗</p>