Podwójne podkreślenia nie powodują, że członek jest "prywatny" w sensie C++ lub Java - Python dość wyraźnie unika tego rodzaju wymuszanych przez język reguł dostępu. Podsumowując, pojedyncza podkreśla atrybut lub metodę jako "szczegół implementacji" - to znaczy, że rzeczy na zewnątrz wciąż mogą się do niego dostać, ale nie jest to obsługiwana część interfejsu klasy, a zatem gwarancje, które klasa może zrobić o niezmiennikach lub kompatybilności wstecz/do przodu, przestają obowiązywać. To rozwiązuje ten sam problem koncepcyjny, co "prywatny" (oddzielenie interfejsu i implementacji) w inny sposób.
dwukrotnie podkreśla powołać nazwa przekręcona który nadal nie jest „prywatny” - to tylko nieco mocniejsze sformułowanie powyższego, przy czym: - Funkcja ta jest szczegółowo wdrożenie tej klasy ale - podklasy może zasadnie oczekiwać, aby mieć metodę o tej samej nazwie, które nie jest pomyślany jako zastąpiona wersja oryginalnego
to wymaga trochę wsparcia językowego, przy czym __name
jest zniekształcone zawierać nazwę klasy - więc wersje podklasy tego programu otrzymują inne nazwy zamiast przesłonić. Jest jeszcze całkiem możliwe, że podklasa lub kod zewnętrzny wywoła tę metodę, jeśli naprawdę tego chce - a celem wymieszania nazw jest jawnie , a nie, aby temu zapobiec.
Ale to wszystko dlatego, „chronione” okazuje się nie do sensu w Pythonie - jeśli naprawdę mieć metodę, która mogłaby przebić niezmienników chyba nazywany przez podklasy (i realistycznie, prawdopodobnie don Nawet jeśli myślisz, że to robisz), Python Way ma to udokumentować. Umieść notatkę w swoim docstringu do skutku "Zakłada się, że jest ona wywoływana tylko przez podklasy" i uruchamia się z założeniem, że klienci zrobią to, co trzeba - ponieważ jeśli tego nie zrobią, stanie się to ich własnym problemem.
Nie można zrobić. Użyj konwencji '_single_underscore' i bądź szczęśliwy. – JBernardo