擅长:python、mysql、java
<p>是否要在每个实例的基础上重写属性查找算法?在不知道你为什么要这么做的情况下,我会冒险猜测有一种更干净、更不复杂的方法来做你需要做的事情。如果您真的需要这样做,那么您需要在类上安装一个重定向<code>__getattribute__</code>处理程序,因为Python只在类上查找特殊方法,而忽略实例上定义的任何内容。在</p>
<p>您还必须特别小心不要进入无限递归:</p>
<pre><code>class FunkyAttributeLookup(object):
def __getattribute__(self, key):
try:
# Lookup the per instance function via objects attribute lookup
# to avoid infinite recursion.
getter = object.__getattribute__(self, 'instance_getattribute')
return getter(key)
except AttributeError:
return object.__getattribute__(self, key)
f = FunkyAttributeLookup()
f.instance_getattribute = lambda attr: attr.upper()
print(f.foo) # FOO
</code></pre>
<p>另外,如果要重写实例上的方法,则不需要自己实例化方法对象,可以在生成方法的函数上使用描述符协议,也可以只调用自参数。在</p>
^{pr2}$