擅长:python、mysql、java
<p>使用<code>__getattr__</code>和<code>__getattribute__</code>是类的最后一个响应获取属性的资源。</p>
<p>请考虑以下几点:</p>
<pre><code>>>> class C:
x = 1
def __init__(self):
self.y = 2
def __getattr__(self, attr):
print(attr)
>>> c = C()
>>> c.x
1
>>> c.y
2
>>> c.z
z
</code></pre>
<p><code>__getattr__</code>方法只在其他方法不起作用时调用(它对运算符不起作用,您可以阅读有关该方法的<a href="https://stackoverflow.com/questions/8637254/intercept-operator-lookup-on-metaclass">here</a>)。</p>
<p>在您的示例中,<code>__repr__</code>和许多其他magic方法已经在<code>object</code>类中定义。</p>
<p>有一件事可以做,思想,它是定义那些神奇的方法,然后使然后调用<code>__getattr__</code>方法。请检查我提出的另一个问题及其答案(<a href="https://stackoverflow.com/questions/8637254/intercept-operator-lookup-on-metaclass">link</a>)以查看某些代码正在执行此操作。</p>