Sie möchten den Algorithmus für die Attributsuche pro Instanz außer Kraft setzen? Ohne zu wissen, warum Sie das tun wollen, würde ich die Vermutung wagen, dass es einen saubereren, weniger komplizierten Weg gibt, das zu tun, was Sie tun müssen. Wenn Sie das wirklich müssen, dann müssen Sie, wie Aaron sagte, eine Umleitung installieren __getattribute__
Handler für die Klasse, da Python spezielle Methoden nur in der Klasse nachschlägt und alles, was in der Instanz definiert ist, ignoriert.
Sie müssen auch besonders vorsichtig sein, um nicht in eine unendliche Rekursion zu geraten:
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
Auch, wenn Sie Methoden auf Ihre Instanz überschreiben, müssen Sie nicht die Methode Objekt selbst instanziieren, können Sie entweder das Deskriptor-Protokoll auf Funktionen, die die Methoden erzeugt oder nur Curry das Argument self.
#descriptor protocol
self.method_to_overwrite = my_method.__get__(self, type(self))
# or curry
from functools import partial
self.method_to_overwrite = partial(my_method, self)