擅长:python、mysql、java
<blockquote>
<p>Is this a subtlety of Python I'm not understanding?</p>
</blockquote>
<p>它并不微妙,非常简单;不像其他语言混淆了这个问题,在Python中,您在类中声明的所有内容都属于该类。这是很自然的,因为类是对象(和其他所有东西一样),因此是附加对象的完全有效的地方。因此,所有这些方法都属于类(而不是神奇地复制到每个实例中),数据属性也是。</p>
<blockquote>
<p>Each listener has an <code>id</code> to identify them</p>
</blockquote>
<p>是的,因为您将一个附加到<code>__init__</code>中的每个实例。这与属于该类的<code>id</code>无关,只是当您通过实例查找<code>id</code>时,将找到该实例自己的<code>id</code>,隐藏属于该类的实例。</p>
<blockquote>
<p>and a list of artists they listen to, artists = []</p>
</blockquote>
<p>但是,当您通过类查找<code>artists</code>时,会找到类<code>artists</code>,因为实例没有。</p>
<blockquote>
<p>Adding something to the artists list adds it for all instances of the Listener class</p>
</blockquote>
<p>不;它将<em>添加到类本身</em>中,这是在实例中找不到对象时查找它们的地方。</p>
<p>请记住,如果您稍后在实例上进行类似<code>self.artists = []</code>的直接赋值,则该实例将获得隐藏类列表的自己的列表。其他实例不会,因为该代码没有在其他实例上运行。</p>