【发布时间】:2015-12-01 16:43:48
【问题描述】:
我有这个:
class MySession:
def __init__(self, session):
session['my-data'] = {} # my data is here
self._session = session
def __getattr__(self, name):
return self._session['my-data'][name]
def __setattr__(self, name, value):
my_data = self._session['my-data']
my_data[name] = value
self._session['my-data'] = my_data
obj = MySession({})
obj.x = 3
基本上我想用对象属性访问来封装对会话(子)字典的访问。但我做不到,因为这会导致无限递归,我猜是因为这样做:
self._session = session
调用setattr,后者又调用getattr,后者又调用getattr等
如何在实现 getattr / setattr 的类中预初始化一些(普通)属性?
【问题讨论】:
-
这会导致同样的无限递归:self.session 再次调用 getattr
标签: python