阅读Django源代码我遇到了this函数 . 它是block标签的实现 .
我感兴趣的是他们从 parser
类实例外部设置了一个带有两个前导下划线( __loaded_blocks
)的变量(解析器是Parser class的一个实例) . Django源代码中的快速grep显示字符串 loaded_blocks
仅在此处出现 .
现在我从来没有考虑过使用python name-mangling功能,但这实际上会隐藏 parser
的 __loaded_blocks
属性!要从 parser
方法读取此属性,您必须求助于 getattr(self, "__loaded_blocks")
.
我是否正确地认为这只是所选属性名称的无意和未使用的副作用?或者是否有更深层次的目的?
In general, why would you want to do such a thing?
EDIT: 为了澄清,我尝试从 parser
的方法访问 __loaded_blocks
属性,它将像任何其他属性一样工作,并且它实际上不是一个受损的属性 .
1 回答
我不认为在将
__
前缀的属性添加到实例时会发生名称修改来自docs:
虽然名称没有被破坏,但它仍然将此标记为代码消费者的“私有”