python在__new__函数中用pickle做cache, 结果导致无限递归?
如题所述, 下述代码会导致无限递归。 这是对odoo中registry的简化, new 方法里面的东西是已经有的, 请问各位如何解决
import pickle
class Cache:
def __init__(self):
self.d = {}
def __setitem__(self, obj, val):
self.d[obj] = pickle.dumps(val)
def __getitem__(self, obj):
return pickle.loads(self.d[obj])
class Car:
cache = Cache()
def __reduce__(self):
return self.__class__, (self.name,)
def __new__(cls, name):
try:
return cls.cache[name]
except KeyError:
return cls.new(name)
@classmethod
def new(cls, name):
car = object.__new__(cls)
car.init(name)
cls.cache[name] = car
return car
def init(self, name):
self.name = name
def __repr__(self):
return self.name
a = Car('audi')
b = Car('audi')
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
object.__new__
會觸發Car
的__new__
。所以應該將new
改爲: