Jeśli „jawne jest lepsze niż niejawne”, dlaczego nie ma w Pythonie jawnych modyfikatorów dostępu: publicznego, chronionego, prywatnego itp.?
Wiem, że chodzi o to, że programista powinien wiedzieć, co robić za pomocą podpowiedzi - nie trzeba używać „brutalnej siły”. Ale „enkapsulacja” lub „ukrywanie informacji” IMO to nie tylko po to, by ludzie byli z dala, to kwestia organizacji i struktury: twoje warstwy programistyczne powinny mieć samookreślające się, wyraźnie określone zakresy i granice, tak jak robią to systemy fizyczne.
Czy ktoś może mi pomóc tutaj z dokładnym wyjaśnieniem, dlaczego ograniczenia dostępu są sugerowane, a nie jawne w Pythonie, języku, który w przeciwnym razie wydaje się być idealny?
Edycja: Do tej pory widziałem 3 proponowane odpowiedzi i zdałem sobie sprawę, że moje pytanie składa się z 2 części:
Dlaczego na przykład nie ma słów kluczowych
private def myFunc(): dostuff....
zamiast IMO brzydkie i trudne do wpisania podkreślenia. Ale to nie jest ważny punkt.
Co ważniejsze:
Dlaczego te modyfikatory dostępu są tylko „zaleceniami” lub wskazówkami i nie są egzekwowane. Trudno będzie później to zmienić? Bardzo łatwo jest zmienić „chroniony” na „publiczny” - a jeśli masz skomplikowany łańcuch dziedziczenia, który utrudnia, masz kiepski projekt - twój projekt powinien być udoskonalony, a nie polegać na funkcji językowej, która ułatwia pisanie źle skonstruowany kod.
Po wprowadzeniu modyfikatorów dostępu kod jest automatycznie dzielony na przedziały - WIESZ, że niektóre segmenty są poza zakresem, więc nie musisz sobie z nimi radzić, chyba że i kiedy jest to konieczne. A jeśli twój projekt nie jest dobry, a ty ciągle przemieszczasz rzeczy do różnych zakresów, język może pomóc ci posprzątać.
Mimo że uwielbiam Python, uważam, że ten drugi punkt jest poważnym brakiem. I nie znalazłem jeszcze na to dobrej odpowiedzi.
private def whatever
polega na tym, że class x: def whatever(self): pass
jest to skrót do class x: pass; x.whatever = lambda self: pass
, więc w zasadzie potrzebujesz prywatnego modyfikatora do przypisania