__slots__ = ('__local', '__dict__', '__name__')
def __init__(self, local, name=None):
object.__setattr__(self, '_LocalProxy__local', local)
object.__setattr__(self, '__name__', name)
def _get_current_object(self):
if not hasattr(self.__local, '__release_local__'):
return self.__local()
try:
return getattr(self.__local, self.__name__)
except AttributeError:
raise RuntimeError('no object bound to %s' % self.__name__)
上面是这个类的部分定义,请问有没有大神知道 LocalProxy (位于 werkzeug.local 模块中)中、、、_LocalProxy__local 的意思,
而且凭空出现一个 self.__local 方法,我猜测这两个是同一个东西,然后打印发现还真是,但是我没有在代码中发现把二者联系起来的逻辑,故上来问问有没有人知道这到底是怎么实现的。。
1
clino 2016-01-04 14:15:04 +08:00 1
|
2
Zzzzzzzzz 2016-01-04 14:38:16 +08:00 2
python 没真正意义的 private, 约定俗成使用前置双下划线表示, 为了规避出问题, 实际上 cls.__prop 访问的是 cls._{cls.__class__.__name__}__prop, 和 flask 及 werkzeug 倒是没什么关系.
|
3
aec4d 2016-08-01 11:20:27 +08:00
接楼上,之所以不写 self.__local = local 、 setattr(self,'__local',local),是因为该对象重写了__setattr__方法。所以该处使用了 object.__setattr__
|
4
lanrenxu 2018-11-20 10:15:25 +08:00
二楼正解,三楼说的也很好,感谢!
|
5
liwb2 2019-07-07 19:17:51 +08:00
#3 正解。LocalProxy 重写了 __setattr__方法,已经不合适用 = 了。
|