Neni to jedno podtrzitko, ale dve a neni to dohoda programatoru, ale vlastnost jazyka. Takto pojmenovana metoda neni svym jmenem pristupna z venku, coz je nezbytne nutne k tomu, aby je bylo mozno prepisovat v odvozenych tridach.
2 podrtrzitka jsou taky jen dohoda programatoru, a rozhodne z toho atributu/metody nedela private:
In [1]: class Foo:
...: def __test(self): print('ahoj')
...:
In [2]: Foo()._Foo__test()
ahoj
Jedinej rozdil je, ze se ta funkce jinak jmenuje, a proto ji omylem neprepisu. Pokud ale budu chtit, tak mi nic nebrani si delat co chci:
In [3]: class Bar(Foo):
...: def _Foo__test(self): print('nazdar')
...:
In [4]: Bar()._Foo__test()
nazdar
Takze nevim jak ty, ale ja zadne private chovani v tomhle nepozoruju. Jen dalsi hnusny, lec docela prakticky, hack
Hádka s blbcem je unavná.
1) Není to dohoda programátorů, je to rys a chováni jazyka, který je implementován v interpretu.
2) Není to hack, je to součást promyšleného designu.
3) Nemá to plnit a neplní to bezpečností funkci, to je v introspektivním jazyce nesmyslný požadavek.
4) Smysl toho je jiný, zabránit nechtěnému konfliktu jmen v rozsáhlých programech, což je nezbytně nutné. Bez toho by oop v Pythonu bylo nepoužitelné pro knihovny a rozsáhlejší projekty.
5) Neznal jsi to, meleš teď kraviny a vytváříš mlhu, abys svou neznalost zakryl.
6) I jedno podtržítko má svůj význam, slouží k označování interních součástí modulů, které se pak nenačítají příkazem from modul import *.
7) Ani toto není domluva programátorů nebo hack, ale implementovaný rys jazyka by design.