Якщо "явний кращий за неявний", чому в Python немає явних модифікаторів доступу: Public, Protected, Private тощо?
Я знаю, що ідея полягає в тому, що програміст повинен знати, що робити через підказку - не потрібно використовувати «грубу силу». Але "Інкапсуляція" або "приховування інформації" ІМО - це не лише для того, щоб уникнути людей, це питання організації та структури: ваші шари розвитку повинні мати чітко визначені сфери та межі, як і фізичні системи.
Чи може хтось, будь ласка, допомогти мені тут, чітко пояснивши, чому обмеження доступу мають на увазі, а не явні в Python, мові, яка в іншому випадку здається близькою до ідеальної?
Редагувати: Поки я бачив 3 запропонованих відповіді, і зрозумів, що на моє запитання є 2 частини:
Чому, наприклад, немає ключових слів
private def myFunc(): dostuff....
замість IMO підкреслюють потворні та важкі підкреслення. Але це не важливий момент.
Що ще більш важливо:
Чому ці модифікатори доступу є лише «рекомендаціями» або підказками, а не застосовуються. Це буде важко змінити пізніше? Дуже просто змінити "захищений" на "публічний" - і якщо у вас є складний ланцюжок успадкування, який ускладнює, ви маєте поганий дизайн - ваш дизайн повинен бути вдосконалений, а не покладатися на мовну особливість, яка дозволяє легко писати погано структурований код.
Коли застосовуються модифікатори доступу, ваш код автоматично розподіляється - ви знаєте, що певні сегменти виходять за межі сфери, тому вам не доведеться з ними боротися, за винятком випадків, коли це потрібно. І якщо ваш дизайн не є корисним, і ви виявляєте, що постійно переміщуєте речі в різні сфери, мова може допомогти вам очистити свій вчинок.
Наскільки я люблю Python, я вважаю цей другий момент серйозним недоліком. І я ще не бачив гарної відповіді на це.
private def whatever
тому, що class x: def whatever(self): pass
це ярлик для class x: pass; x.whatever = lambda self: pass
, тому в основному вам знадобиться приватний модифікатор для призначення