我试图封装一个对象而不更改其默认行为,问题是,当我可以访问它已经构造的对象时。因此,我的想法是使用继承和使用__getattr__,__setattr__,__getitem__,和__setitem__和代表对封装的对象,除了场我定义自己。
class Request(HttpRequest):
def __init__(self, request, *args, **kwargs):
self._original_request = request
super(Request, self).__init__(*args, **kwargs)
def __getattr__(self, name):
return getattr(self._original_request, name)
def __setattr__(self, name, value):
if name == '_original_request':
super(Request, self).__setattr__(name, value)
else:
self._original_request.__setattr__(name, value)
def __getitem__(self, key):
return self._original_request[key]
def __setitem__(self, key, value):
self._original_request[key] = value
如果我通过原始对象,一切都很好。如果不这样做,我会得到
host = self.META['SERVER_NAME']
KeyError: u'SERVER_NAME'
我想念什么吗?我的课程难道不应该完全像它所封装的那样吗?
肥皂起泡泡
牧羊人nacy
相关分类