讀取Django源代碼我遇到了this函數。這是block標籤的實施。爲什麼要在類的外部設置「private」python屬性?
我感興趣的是,他們從設置變量有兩個領先的下劃線(__loaded_blocks
)外的parser
類實例(解析器是Parser class的一個實例)。 Django源代碼中的快速grep顯示字符串loaded_blocks
僅在此出現。
現在,我從來沒有考慮過這個使用前蟒蛇名稱壓延功能,但是這實際上將隱藏parser
的__loaded_blocks
屬性從本身!要從parser
方法中讀取此屬性,您必須求助於getattr(self, "__loaded_blocks")
。
我是否正確地認爲這只是所選屬性名稱的意外和未使用的副作用?還是有更深的目的呢?
一般來說,你爲什麼想要做這樣的事情?
編輯:要澄清,我充分認識到,只要你不要試圖從parser
的方法訪問__loaded_blocks
屬性,它的工作就像任何其他的屬性,它是其實不是一個mangled屬性。
沒有目的的消費者,Django的只是有醜陋的代碼。 – Keith