Muitas cópias são quebradas nas discussões sobre o motivo pelo qual o python é meio byaka - não proíbe a chamada de métodos não públicos. E, é claro, as explicações no espírito de "somos todos adultos aqui" soaram mais de uma vez, mas parecia que não eram suficientes, acho que finalmente entendi como explicar isso de forma mais clara, espero que isso seja verdade.
Deixe-me lembrá-lo que, para métodos particulares, o python altera dinamicamente o nome e não restringe o acesso a ele de forma alguma, mas para protegido não faz isso, é apenas uma convenção de nomenclatura para métodos, para quem realmente não sabe, existem materiais adicionais
aqui e
aqui .
Primeiro, você precisa começar com a pergunta: por que o idioma deve proibir a chamada de algum código? Muitos idiomas fazem isso, mas não se segue que esteja correto e deva ser.
!= .
Quais são as opções possíveis?
- Você é o autor do código; por algum motivo, decidiu que esse método não é necessário em domínio público, ok, seu direito de pensar assim, mas por que deveria ser tecnicamente proibido? Esse código chama daemons e precisa ser oculto? Ou é um código comum e outro programador como você pode estar em uma situação que você nem consegue imaginar e na qual ele precisa usar esse código. Ou você pensa que é um super-homem e sabe absolutamente que isso não pode ser?
- Você é usuário do código de outra pessoa - normalmente não sabe nada sobre a existência de métodos não públicos, a menos que faça esforços especiais (os métodos protegidos podem ser documentados, mas com uma indicação do que são). Bem, digamos que você aprendeu conscientemente e propositadamente sobre a existência de algum método não público e o chamou, o que aconteceu? A terra se abriu e Satan e Saddam saltaram? Ou funcionou como esperado? Ouço alguém gritando - é claro que isso pode ocorrer durante a atualização, mas como você deliberadamente usou o método não público, entende esse risco (se não, está fora do lugar). Além disso, a atualização não é um processo espontâneo, como o decaimento do núcleo de um átomo de urânio, tudo no ambiente de teste irá quebrar. É claro que, para alguns, as atualizações são de natureza quântica e ocorrem nos momentos mais imprevisíveis nos lugares mais imprevisíveis, mas é ridículo falar sobre alguns métodos privados lá; haverá muitos problemas sem eles.
De fato, por trás de todos esses argumentos, existe um importante princípio filosófico: "A máquina é burra, a pessoa é inteligente". I.e. não cabe à máquina tomar decisões sobre o que é possível e o que não pode ser, uma decisão a ser tomada por uma pessoa.
Você pode combater isso dizendo que o autor do código (uma pessoa ou alguém racional) decidiu que é impossível, mas outro princípio entra em jogo, o princípio da liberdade e da responsabilidade: "Se você já compartilhou algo com outras pessoas, não determine como elas são precisamos usá-lo, eles mesmos são responsáveis por suas ações ”, aqui chegamos à conclusão de que somos todos adultos aqui e somos responsáveis por nossas ações.
Alguém dirá que digitar é a mesma restrição - é verdade, mas esse é o caso quando uma máquina diz a uma pessoa: Oh, eu sou estúpido, não sei o que fazer - quem e que tipo de líder, por favor, explique.
A propósito, há um ótimo exemplo de caso em que os autores decidiram que podem tornar o carro inteligente, mas não tiveram sucesso - este é o formato YAML, os autores escreveram uma grande especificação que
poucas pessoas parecem capazes de implementar ou que não é clara o suficiente , mas existem
problemas fundamentais que não estão relacionados à implementação quando tentativas de adivinhar o tipo de sabão (fingir que a máquina é inteligente) levam a um fiasco.
No
mundo python, havia um homem que entendeu isso (e
descrito em detalhes). Sua biblioteca se parece com a abordagem correta - os dados são legíveis por humanos, mas para os dados existe um esquema separado, escrito por humanos, que permite que a máquina não finja ser inteligente, mas saiba onde é o tipo, mas infelizmente essa abordagem ainda não se tornou popular.
Espero ter conseguido melhorar a explicação da filosofia python e tirar sarro de outras abordagens)