擅长:python、mysql、java
<p>Python类顶层的声明成为类属性。如果来自C++或java背景,这与声明静态成员变量类似。不能在该级别分配实例属性。在</p>
<p>变量<code>self</code>通常指的是类的一个特定实例,从中调用了方法。当使用语法<code>inst.method()</code>进行方法调用时,函数的第一个参数是调用该方法的对象<code>inst</code>。在您的例子中,通常按照约定,该参数在方法的函数体中命名为<code>self</code>。您可以将<code>self</code>看作是方法体中的一个有效标识符。您的赋值<code>self.furry = True</code>不在方法中发生,因此self没有在那里定义。在</p>
<p>你基本上有两个选择来实现你想要的。第一种方法是正确地将<code>furry</code>定义为cat类的属性:</p>
<pre><code>class Cat(Mammals):
furry = True
# Rest of Cat implementation ...
</code></pre>
<p>也可以在cat构造函数中设置实例变量<code>furry</code>的值:</p>
^{pr2}$
<p>如果您正在接触Python,我强烈建议您阅读Python文档的以下两部分:</p>
<p><a href="https://docs.python.org/3/tutorial/classes.html" rel="nofollow noreferrer" title="Classes">Python classes</a></p>
<p><a href="https://docs.python.org/3/reference/datamodel.html#special-method-names" rel="nofollow noreferrer" title="Data Model Special Methods">Python data model special methods</a>(更高级)</p>