Hier meine Implementierung von memoize ist:Memoize für Klassen, deren init hat super() Initialisierung
Katze test.py
def _memoize(obj):
cache = obj.cache = {}
@functools.wraps(obj)
def memoizer(*args, **kwargs):
key = str(args) + str(kwargs)
if key not in cache:
cache[key] = obj(*args, **kwargs)
return cache[key]
return memoizer
@_memoize
class Test(object):
def __init__(self, arg1):
super(Test, self).__init__()
self.arg = arg1
print "init executed for " + arg1
def authenticate(self):
print self.arg
t1 = Test('a')
wenn ich dies laufe ich folgende Fehlermeldung erhalten:
python $ test.py
Traceback (most recent call last):
File "test.py", line 23, in <module>
t1 = Test('a')
File "test.py", line 9, in memoizer
cache[key] = obj(*args, **kwargs)
File "test.py", line 16, in __init__
super(Test, self).__init__()
TypeError: super() argument 1 must be type, not function
Können Sie bitte vorschlagen, wie Sie diesen Fehler beheben?
Also wollen Sie immer 'Test (x) ist Test (y)' wahr sein, wenn 'x == y' (oder zumindest, wenn 'hash (x) == hash (y)')? – chepner