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)