采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
当 from flask import current_app 的时候,代码执行到这一句的时候current_app是unbound,那么即使我接下来手动将一个AppContent入栈,我认为current_app不会变化(事实他变了),我的想法是current_app在导入进来的一瞬间值是什么就是什么,除非在AppContent入栈后重新获取一遍current_app。但是我们的代码并没有呀,为啥会这样子
curren_app又不是你实例化的,为什么是不变的呢?每一次去引用current_app都会去读栈顶元素啊,栈顶元素不同读到自然不同。
current_app指向的是栈顶,一个地址。他一直指向这个位置。当他读到的内容是空就是 unbound,当你压入实际的Flask app,那么该指针指向的位置就存在值了,调用的时候就会有返回。
好像不是这样的,今天我研究了一下,这个东西涉及到一种代理机制
当你每一次去获取current_app的属性的时候,因为这是个LocalProxy,所以都会去执行这个对象__getattr__方法,实际在这个方法内部重新调用了find_app()来获取当前栈顶的app,所以表面上看起来这两个对象指向了同一个地址
是这样的啊,我课程里好像讲了 是依靠find_app这个可调用对象来获取的。
登录后可查看更多问答,登录/注册
7月老师深入浅出剖析Flask核心机制,和你一起探讨Python高级编程
1.2k 20
2.3k 17
2.3k 15
2.5k 14
1.4k 13