擅长:python、mysql、java
<p><code>__getattr__</code>仅在常规查找未找到该项时调用。查找项目时,首先运行对象的<code>__getattribute__</code>。如果它引发<code>AttributeError</code>(它在对象的dict中没有找到它),那么它调用<code>__getattr__</code></p>
<p>代码返回<code>bound method</code>的原因是<strong>从未执行过uuu getattribute\uuuuu代码,因为该属性是通过常规查找过程找到的。即使它被处决了,也行不通<code>item</code>是保存参数的变量<code>self.item</code>不存在;方法是使用<code>attr = getattr(self, item)</code></p>
<p>您需要的是<code>@property</code>,它允许您像访问属性一样访问方法:</p>
<pre><code> ... class code ...
@property
def x(self):
return 1
a = A()
print a.x
1
</code></pre>
<p>注意:不能再将属性作为函数调用:</p>
<pre><code>a.x()
Traceback (most recent call last):
File "C:\Python27\tests\test.py", line 12, in <module>
print a.x()
TypeError: 'int' object is not callable
</code></pre>