Czytanie kodu źródłowego Django natrafiłem na funkcję this. Jest to implementacja znacznika block.Dlaczego ustawić "prywatny" python atrybut z * poza * klasy?
Co mnie interesuje to, że są one ustawienie zmiennej z dwóch wiodących podkreślenia (__loaded_blocks
) od poza instancję parser
klasy (parser jest instancją Parser class). Szybki grep w kodzie źródłowym Django pokazuje, że ciąg loaded_blocks
występuje tylko tutaj.
Nigdy wcześniej nie rozważałem możliwości użycia funkcji wymieszania z pythonem, ale w efekcie ukryję przed nią atrybut __loaded_blocks
z parser
! Aby przeczytać ten atrybut z metody parser
, musisz odwołać się do getattr(self, "__loaded_blocks")
.
Czy mam rację, sądząc, że jest to tylko niezamierzony i nieużywany efekt uboczny wybranego atrybutu? Czy może jest to głębszy cel?
Ogólnie rzecz biorąc, dlaczego chcesz coś takiego zrobić?
EDIT: W celu wyjaśnienia, jestem w pełni świadomy, że tak długo, jak nie próbować uzyskać dostęp do atrybutu __loaded_blocks
od sposobu parser
, to będzie działać tak jak każdy inny atrybut, i że jest w rzeczywistości nie zaklętego atrybutu.
bez celu, tylko Django ma brzydkiego kodu. – Keith