¿En python 3.8 para establecer metodos y atributos privados se utilizan 1 o 2 underscore?

freddy molleda

freddy molleda

Pregunta
studenthace 5 años

¿En python 3.8 para establecer metodos y atributos privados se utilizan 1 o 2 underscore?

2 respuestas
para escribir tu comentario
    freddy molleda

    freddy molleda

    studenthace 5 años

    Gracias por el aporte @veloz21 pero no me aclara mucho la duda, es decir, en la practica cuando escribo el código que uso para estudiar y escribo un atributo de una clase con un (1) underscore, igualmente puedo acceder a el y modificarlo desde fuera de la clase, pero cuando reemplazo un (1) underscore por dos (2) underscore el comportamiento se modifica y ya no me permite ni acceder ni modificar dicho atributo desde fuera de la clase y ademas el programa funciona como debe. tu sabes ¿por que ocurre esto?

    Fernando Veloz Cleto

    Fernando Veloz Cleto

    studenthace 5 años

    Se utiliza 1 underscore por convención, para "marcar" un método o atributo como privado (En realidad no hace nada más que avisar a los programadores que es privado) Se utilizan 2 underscore, cuando se quiere renombrar la función para que no cause conficto. En automático se renombra a la forma _classname__methodname

    Según la documentación de python: . "Private” instance variables that cannot be accessed except from inside an object don’t exist in Python. However, there is a convention that is followed by most Python code: a name prefixed with an underscore (e.g. _spam) should be treated as a non-public part of the API (whether it is a function, a method or a data member). It should be considered an implementation detail and subject to change without notice.

    Since there is a valid use-case for class-private members (namely to avoid name clashes of names with names defined by subclasses), there is limited support for such a mechanism, called name mangling. Any identifier of the form __spam (at least two leading underscores, at most one trailing underscore) is textually replaced with _classname__spam, where classname is the current class name with leading underscore(s) stripped. This mangling is done without regard to the syntactic position of the identifier, as long as it occurs within the definition of a class. https://docs.python.org/3.8/tutorial/classes.html#tut-private

Curso de Python 2019

Curso de Python 2019

Python es una pieza fundamental de varios sistemas de software más importantes del mundo. Simple, claro y con un código legible, Python es el lenguaje por excelencia para la programación web y la ciencia de datos. Aprende este lenguaje a partir de proyectos prácticos que harás desde cero.

Curso de Python 2019
Curso de Python 2019

Curso de Python 2019

Python es una pieza fundamental de varios sistemas de software más importantes del mundo. Simple, claro y con un código legible, Python es el lenguaje por excelencia para la programación web y la ciencia de datos. Aprende este lenguaje a partir de proyectos prácticos que harás desde cero.