Python werkzeug';s LocalProxy.\uu local,在哪里初始化?
我很好奇包中的Python werkzeug';s LocalProxy.\uu local,在哪里初始化?,python,flask,werkzeug,Python,Flask,Werkzeug,我很好奇包中的LocalProxy是如何工作的。具体来说,\u local字段在哪里初始化 @implements_bool class LocalProxy(object): __slots__ = ("__local", "__dict__", "__name__", "__wrapped__") def __init__(self, local, name=None): obj
LocalProxy
是如何工作的。具体来说,\u local
字段在哪里初始化
@implements_bool
class LocalProxy(object):
__slots__ = ("__local", "__dict__", "__name__", "__wrapped__")
def __init__(self, local, name=None):
object.__setattr__(self, "_LocalProxy__local", local)
object.__setattr__(self, "__name__", name)
if callable(local) and not hasattr(local, "__release_local__"):
object.__setattr__(self, "__wrapped__", local)
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
类定义中没有引用self.\uu local
的其他位置,而且在我看来,self.\uu local
在任何地方都没有初始化。它是否以某种方式神奇地别名为self.\u LocalProxy\u\u local
?您所称的别名在Python中称为名称混乱
举个例子:
class Customer:
def __init__(self, name):
self.__name = name
name
然后作为Customer.\u Customer\u name
提供
虽然这实际上很少使用,但其目的是使访问变得更难。不管你为什么想要这个
代码示例中另一个有趣的部分称为slots
这是一种以高级方式定义/初始化属性的方法。它有助于减少内存,并防止动态定义新属性。它设置在\uuuuuu init\uuuuuuuu
的第一行,即对象的右边。\uuuuuu setattr\uuuuuuuuuu(self,“\u LocalProxy\uu local”,local)
。