Если «явный лучше, чем неявный», то почему в Python нет явных модификаторов доступа: Public, Protected, Private и т. Д.?
Я знаю, что идея заключается в том, что программист должен знать, что делать с помощью подсказки - не нужно использовать «грубую силу». Но IMO «Инкапсуляция» или «сокрытие информации» - это не просто удержание людей, это вопрос организации и структуры: ваши уровни разработки должны иметь самоопределяющиеся, четко разграниченные области и границы, как это делают физические системы.
Может кто-нибудь, пожалуйста, помогите мне с ясным объяснением того, почему ограничения доступа подразумеваются, а не явны в Python, языке, который в других отношениях кажется близким к идеальному?
Изменить: Пока я видел 3 предложенных ответа, и я понял, что есть 2 части на мой вопрос:
Почему нет ключевых слов, например
private def myFunc(): dostuff....
вместо ИМО уродливые и трудные для подчеркивания. Но это не важный момент.
Важнее:
Почему эти модификаторы доступа являются «рекомендациями» или подсказками и не применяются. Это будет трудно изменить позже? Очень просто изменить «защищенный» на «общедоступный» - и если у вас сложная цепочка наследования, которая усложняет процесс, у вас плохой дизайн - ваш дизайн должен быть усовершенствован, а не полагаться на языковую функцию, которая облегчает написание плохо структурированный код
Когда применяются модификаторы доступа, ваш код автоматически разделяется - вы ЗНАЕТЕ, что определенные сегменты находятся вне области видимости, поэтому вам не нужно иметь с ними дело, за исключением случаев, когда это необходимо. И, если ваш дизайн не подходит, и вы обнаруживаете, что постоянно перемещаете вещи в разные области видимости, язык может помочь вам привести себя в порядок.
Столько, сколько я люблю Python, я считаю, что этот второй пункт является серьезным недостатком. И мне еще предстоит увидеть хороший ответ на это.
private def whatever
том, что class x: def whatever(self): pass
это сокращение class x: pass; x.whatever = lambda self: pass
, поэтому в основном вам понадобится частный модификатор для назначения