我最近逐步完成了CPython源代码,特别是在编译期间查看类的符号表条目.
我碰到了typedef struct _symtable_entry
结构的以下条目:
[-- other entries --] unsigned ste_needs_class_closure : 1; /* for class scopes, true if a closure over __class__ should be created */ [-- other entries --]
我似乎无法理解它,也无法找到实际设置的python代码示例ste_needs_class_closure == 1
.在其他失败的尝试中,我尝试了以下方法:
class foo: y = 30 def __init__(self): self.x = 50 def foobar(self): def barfoo(): print(self.x) print(y) return barfoo
但即使它执行,执行ste_needs_class_closure
期间的价值0
也不1
是我希望的那样.
实际上改变这个值的功能对它drop_class_free
没有多大帮助.不幸的是,它也没有任何赞美它的评论.
它实际上用于analyze_block
评论:
/* Check if any local variables must be converted to cell variables */
我可以理解为一个概念,但无法找到它发生的例子.
我已经尝试在Python 3.4中搜索更新日志,这是该成员首次出现的版本,但未找到对它的引用.
那么,任何人都可以解释__class__上的闭包是什么意思,即类的局部变量何时被转换为单元变量?理想情况下,在执行过程中实际显示此行为的示例将非常棒.