擅长:python、mysql、java
<blockquote>
<p>if I wanted to add a new attribute in the subclass as I attempt to do
in the Cats class, I get an error saying "self" is not defined. Yet I
used "self" in the definition of the dog class.</p>
</blockquote>
<p>在你的超类哺乳动物中,有一个<code>__init__</code>函数,它接受你选择的一个参数来调用<code>self</code>。当您在<code>__init__</code>函数体中时,此参数在作用域内-它是与任何局部变量一样的局部变量,并且在其包含函数终止后无法引用它。
在Dog类上定义的函数<code>do_a_trick</code>,也接受一个名为<code>self</code>的参数,并且它也是该函数的本地函数。
这些变量的特殊之处并不是它们的名称(您可以随意调用它们),而是事实上,作为python中实例方法的第一个参数,它们获得了对调用它们的对象的引用作为它们的值。(把最后一句话再读几遍,这是理解这一点的关键,你可能第一次就不会明白了。)</p>
<p>现在,在<code>Cat</code>中,有一行代码根本不在函数中。此时,范围内没有任何内容,包括<code>self</code>,这就是它失败的原因。如果要在<code>Cat</code>中定义一个函数,该函数接受一个名为<code>self</code>的参数,则可以引用该参数。如果该参数碰巧是<code>Cat</code>上实例方法的第一个参数,那么它将具有调用它的<code>Cat</code>实例的值。否则,它就会有任何被传给它的东西。在</p>
<p>*你的选择很明智!在</p>