<p>我将代码粘贴到一个文件中,并添加以下内容:</p>
<pre><code>>>> class Foo(object):
... pass
>>> a = Foo()
>>> a.PixelVals = [(1,2,3),(4,5,6)]
>>> __computeTopColors(a)
[(1, 2, 3)]
</code></pre>
<p>所以这个代码没有问题。在</p>
<p>有一些文体问题,只是没有一个破坏了代码。例如:</p>
<ul>
<li>你不应该给你的变量命名,比如<code>min</code>和{<cd2>},它们与内置函数的名称相同。在</li>
<li>不要放太多除了让内容更难阅读之外没有任何功能的额外的paren-<code>int(((max[1])/2))</code>显然完全等同于{<cd4>},但是要想清楚你是怎么做的,你需要几秒钟和一点思考,甚至还要花更长的时间来验证你做得是否正确(这一直是个问题,但尤其是当你要求其他人查看你的代码并猜测它可能有什么问题时)。在</li>
<li>你应该用小写字母而不是CamelCase来命名像<code>PixelVals</code>这样的变量</li>
</ul>
<p>所以很明显,出了什么问题都是在你代码的其他部分,你没有告诉我们。在</p>
<p>您添加了回溯的最后一行,并说它来自“我的代码块中的最后一行”。最后一行是:</p>
^{pr2}$
<p>错误会对此进行投诉:</p>
<pre><code>a.temp()
</code></pre>
<p>很明显,你展示给我们的代码不是你正在运行的代码。但我可以从中猜出问题所在:</p>
<p>该<code>a</code>可能是一个类变量或全局变量,其中包含一个<code>list</code>。你试图把它称为函数。所以Python非常明智地告诉您list对象是不可调用的。在</p>
<p>或者,还有一个猜测:</p>
<blockquote>
<p>I set self.temp equal to self.__computeTopColors</p>
</blockquote>
<p>好吧,这将用一个不同的变量替换方法<code>temp</code>。如前所述,它实际上会将方法<code>temp</code>替换为绑定方法<code>__computeTopColors</code>,这不能解决您所看到的问题(尽管这是一件非常奇怪和糟糕的事情)。但也许这不是真的,你实际上把<code>self.temp</code>设置为<code>self.__computeTopColors()</code>,这是调用绑定方法的结果。可能是个单子。所以现在,您还没有展示给我们的其他代码试图通过执行<code>a.temp()</code>来调用<code>temp</code>方法,因为您已经用<code>list</code>代替了可调用的<code>temp</code>方法,这就产生了相同的错误。在</p>
<p>事实上,即使您没有替换<code>temp</code>方法,它也不完全像定义的那样有用:</p>
<pre><code>def temp(self):
print self.temp
</code></pre>
<p>除了您实现的绑定方法<code>temp</code>(例如,<code><bound method Foo.temp of <__main__.Foo object at 0x106d0f2d0>></code>)的表示之外,没有其他方法可以打印任何内容,这对您可能没有任何用处。在</p>
<p>不管是第一个问题,第二个问题,还是完全不同的问题,这一切都指向同一个更大的问题:不要给变量取任意、无意义的名称,如果你这样做了,要非常小心,不要在不同的地方重复使用相同的名称来表示不同的东西。如果幸运的话,您将混淆Python并得到一个错误。如果你运气不好,你只会混淆你自己和你代码的其他读者。在</p>