Muchas copias se rompen en las discusiones sobre por qué la pitón es una especie de byaka: no prohíbe llamar a métodos no públicos. Y, por supuesto, las explicaciones en el espíritu de "todos somos adultos aquí" sonaron más de una vez, pero parecía que no eran suficientes, creo que finalmente entendí cómo explicar esto más claramente, espero que esto sea cierto.
Permítanme recordarles que para los métodos privados, Python solo cambia dinámicamente el nombre y no restringe el acceso a él de ninguna manera, pero para protegido no hace esto, es solo una convención de nombres para los métodos, para aquellos que realmente no saben, hay materiales adicionales
aquí y
aquí. .
Primero, debe comenzar con la pregunta, ¿por qué el lenguaje debería prohibir llamar a algún código? Muchos idiomas hacen esto, pero de esto no se deduce que sea correcto y que deba serlo.
!= .
¿Cuáles son las posibles opciones?
- Usted es el autor del código, por alguna razón decidió que este método no es necesario en el dominio público, está bien, tiene derecho a pensarlo, pero ¿por qué debería estar técnicamente prohibido? ¿Este código llama a demonios y necesita estar oculto? ¿O es un código normal y otro programador como usted podría estar en una situación en la que ni siquiera puede pensar y en la que necesita usar este código? ¿O crees que eres un superhombre y sabes absolutamente que esto no puede ser?
- Usted es usuario del código de otra persona; por lo general, no sabe nada acerca de la existencia de métodos no públicos a menos que haga esfuerzos especiales (los métodos protegidos pueden documentarse, pero con una indicación de cuáles son). Bueno, digamos que a sabiendas ya propósito aprendió sobre la existencia de algún método no público y lo llamó, ¿qué pasó? ¿Se abrió la tierra y Satanás y Saddam saltaron? ¿O funcionó como se esperaba? Escucho a alguien gritar: puede romperse durante la actualización, por supuesto, pero dado que usó deliberadamente el método no público, entonces comprende este riesgo (si no, entonces está fuera de lugar). Además, la actualización no es un proceso espontáneo, como la descomposición del núcleo de un átomo de uranio, todo en el entorno de prueba se romperá. Por supuesto, para algunos sucede que las actualizaciones son de naturaleza cuántica y ocurren en los momentos más impredecibles en los lugares más impredecibles, pero es ridículo hablar sobre algunos métodos privados allí, habrá muchos problemas sin ellos.
De hecho, detrás de todos estos argumentos hay un principio importante, uno puede decir filosófico: "La máquina es tonta, la persona es inteligente". Es decir no es la máquina la que debe tomar decisiones sobre lo que es posible y lo que no, una persona debe tomar una decisión.
Puede contrarrestar esto diciendo que el autor del código (una persona o alguien racional) decidió que es imposible, pero luego entra en juego otro principio, el principio de libertad y responsabilidad: "Si ya ha compartido algo con otros, no dicte cómo son". debemos usarlo, ellos mismos son responsables de sus acciones ”, aquí llegamos a la conclusión de que todos somos adultos aquí y somos responsables de nuestras acciones.
Alguien dirá que escribir es la misma restricción, es cierto, pero este es el caso cuando una máquina le dice a una persona, oh, soy estúpido, no sé qué hacer, a quién y a qué tipo conducir, explique amablemente.
Por cierto, hay un gran ejemplo de un caso en el que los autores decidieron que pueden hacer que el automóvil sea inteligente, pero no tuvieron éxito: este es el formato YAML, los autores escribieron una gran especificación que
pocas personas parecen ser capaces de implementar o no es lo suficientemente clara , pero hay
problemas fundamentales que no están relacionados con la implementación cuando los intentos de adivinar el tipo de jabón (pretender que la máquina es inteligente) conducen a un fiasco.
En el
mundo de las
pitones había un hombre que entendió esto (y lo
describió en detalle). Su biblioteca se parece al enfoque correcto: los datos son legibles por humanos, pero para los datos hay un esquema separado escrito por humanos que permite que la máquina no pretenda ser inteligente, sino saber de qué tipo, pero desafortunadamente este enfoque aún no se ha generalizado.
Espero haber logrado mejorar la explicación de la filosofía de Python y burlarme de otros enfoques)