阅读 Django 源代码后,我发现了这个函数。这是块标签的实现。
令我感兴趣的是,他们从类实例外部设置了一个带有两个前导下划线 ( __loaded_blocks
)的变量(解析器是Parser 类的一个实例)。Django 源代码中的快速 grep 显示该字符串仅出现在此处。parser
loaded_blocks
现在我以前从未考虑过使用 python 名称修饰功能,但这实际上会隐藏__loaded_blocks
属性parser
本身!要从parser
方法中读取此属性,您必须求助于getattr(self, "__loaded_blocks")
.
我是否认为这只是所选属性名称的意外和未使用的副作用?还是有更深层次的目的?
一般来说,你为什么要做这样的事情?
编辑:澄清一下,我完全知道,只要您不尝试__loaded_blocks
从 的方法访问该属性parser
,它就会像任何其他属性一样工作,并且它实际上不是一个损坏的属性。