<p>因为缩进错误,它不能工作。缩进是Python如何知道<code>def</code>是类上的一个方法而不是顶层的普通函数,如何知道哪些行是循环的一部分,循环的终点在哪里,等等。你必须把它弄对。但你有这个:</p>
<pre><code>class calculation(object):
def multiply(self, a=5, b=6):
self.a = a
self.b = b
</code></pre>
<p>因为<code>def</code>与<code>class</code>返回同一级别,所以类中没有任何内容。这是不合法的;每个复合语句(以<code>:</code>结尾的语句,如类定义)后面都必须有缩进的内容。你知道吗</p>
<p>除此之外,<code>multiply</code>接受<code>self</code>参数的事实意味着它几乎可以肯定是某个类的方法。你知道吗</p>
<p>所以,要解决这个问题:</p>
<pre><code>class calculation(object):
def multiply(self, a=5, b=6):
self.a = a
self.b = b
</code></pre>
<hr/>
<p>现在,它起作用了。但它似乎什么都没做,是吗?你知道吗</p>
<p>当然,总有可能你没有照搬整件事。或者,无论你从哪里复制它,代码都是错误的,而且漏了一行。但是让我们假设这确实是一个有用的函数,来自于某人的有用代码(除了缩进错误)。你知道吗</p>
<p>首先,你要做的就是定义一个类。如果从不创建该类的实例,更不用说对其调用任何方法,则该类不会执行任何操作。但假设您知道这一点,并且知道如何创建实例和调用方法。它似乎什么也没做。你知道吗</p>
<p>最有可能的情况是(同样,假设这是您实际要问的问题,并且您正确地复制了代码,并且……)这样做的目的是存储操作数以供以后使用。你知道吗</p>
<p>一个现实的例子说明了为什么你想这样做,那就是在某种表达式树库中,每当它解析一个<code>multiply</code>时,它就会调用<code>*</code>,然后逐渐地从简单的表达式中构建出复杂的表达式,也许这样你就可以把表达式编译成C代码或者对它进行代数转换。你知道吗</p>
<p>但你可能觉得这听起来像是胡言乱语,所以这里有一个简单但愚蠢的例子:</p>
<pre><code>class calculation(object):
def multiply(self, a=5, b=6):
self.a = a
self.b = b
table = []
for a in range(1, 5):
row = []
for b in range(1, 5):
col = calculation()
col.multiply(a, b)
row.append(col)
table.append(row)
print('Times table')
for row in table:
for col in row:
print('{} x {} = {}'.format(col.a, col.b, col.a * col.b))
</code></pre>