Se 'explícito é melhor que implícito', por que não existem modificadores de acesso explícito no Python: Público, Protegido, Privado etc.?
Eu sei que a idéia é que o programador saiba o que fazer através de uma dica - não é necessário usar 'força bruta'. Mas o "encapsulamento" ou "ocultação de informações" da IMO não é apenas para manter as pessoas afastadas, é uma questão de organização e estrutura: suas camadas de desenvolvimento devem ter escopos e fronteiras autodefinidos e claramente delimitados, assim como os sistemas físicos.
Alguém pode me ajudar aqui com uma explicação sólida sobre por que as restrições de acesso estão implícitas e não explícitas no Python, uma linguagem que, de outra forma, parece quase perfeita?
Edit: Até agora, vi 3 respostas propostas e percebi que existem 2 partes na minha pergunta:
Por que não existem palavras-chave, por exemplo
private def myFunc(): dostuff....
em vez de IMO, os sublinhados feios e difíceis de digitar. Mas esse não é o ponto importante.
Mais importante:
Por que esses modificadores de acesso são apenas 'recomendações' ou dicas e não são impostos. Será difícil mudar mais tarde? É muito simples mudar de 'protegido' para 'público' - e se você tem uma cadeia de herança complicada que dificulta, o design é ruim - o design deve ser refinado, em vez de depender de um recurso de linguagem que facilita a escrita código mal estruturado.
Quando os modificadores de acesso são impostos, seu código é automaticamente compartimentado - você SABE que determinados segmentos estão fora do escopo, portanto você não precisa lidar com eles, exceto se e quando for necessário. E, se o seu design não é bom e você se vê constantemente movendo coisas para dentro e para fora de diferentes escopos, a linguagem pode ajudá-lo a limpar seu ato.
Por mais que eu goste de Python, considero este segundo ponto uma deficiência séria. E ainda tenho que ver uma boa resposta para isso.
private def whatever
é, que class x: def whatever(self): pass
é um atalho para class x: pass; x.whatever = lambda self: pass
, então, basicamente, você precisaria de um modificator particular de cessão