<p>你的要求与<code>__init__</code>没有太大关系。你可以按照你在第二个例子中说的去做,但是它和第一个例子做的不一样。在</p>
<p>在第一个示例中,它打印“Hello”,后跟一个传递给方法的参数。您可以通过传入其他内容使其打印除“水手”之外的其他内容:</p>
<pre><code>>>> a.method_a('buddy!')
Hello buddy!
</code></pre>
<p>在第二个例子中,它总是打印“你好,水手!”你不能让它打印其他东西。在</p>
<p>至于<code>__init__</code>,在您的示例中,<code>__init__</code>并没有那么有用,因为它所做的只是为每个对象设置一个属性<code>x</code>,该属性对每个对象都是相同的字符串。如果要在创建每个对象时“设置”,则应使用<code>__init__</code>。在您的例子中,这个设置没有那么有趣,因为对于每个对象它总是相同的。您不需要<em>使用<code>__init__</code>,但是创建没有附加某种单独状态的对象通常没有多大意义。下面是一个更具说明性的例子:</p>
^{pr2}$
<p>然后你可以这样做:</p>
<pre><code>>>> hello = Greeter("hello")
>>> hello.greet('sailor')
hello, sailor!
>>> howdy = Greeter('Howdy')
>>> howdy.greet('partner')
Howdy, partner!
</code></pre>
<p>在这里,当您创建<code>Greeter</code>时,您可以指定问候语。该问候语与对象一起存储,并在它是某人时使用。<code>__init__</code>的要点是,您可以用不同的问候语制作多个问候语。在</p>
<p>请注意,当我打电话给<code>greet</code>时,我仍然会传递问候的人。因此,问候语(在本例中是hello或howdy)是在我创建对象时设置的,但是每次我使用对象来<code>greet</code>时都会重新指定要问候的人。在</p>
<p>通常情况下,您将在代码中混合这两种情况。有些信息是“对象的一部分”,您将在<code>__init__</code>中处理它们并将它们存储在对象上。其他一些则是更具体或短暂的信息,您将把它们作为函数参数传递给您要执行的每个任务。这两者之间的平衡取决于类应该做什么,但是上面的例子应该说明它们之间的区别。在</p>
<p>而且,这两个都与为什么你看到“没有”印刷无关。jimbob博士解释了为什么会发生这种情况。在</p>