Este "subrayado" parece ocurrir mucho, y me preguntaba si esto era un requisito en el lenguaje Python, o simplemente una cuestión de convención.
Además, ¿podría alguien nombrar y explicar qué funciones tienden a tener guiones bajos y por qué ( __init__
por ejemplo)?
python
function
methods
double-underscore
Chuck Testa
fuente
fuente
Respuestas:
De Python PEP 8 - Guía de estilo para código Python :
Tenga en cuenta que los nombres con guiones bajos iniciales y finales dobles están esencialmente reservados para Python: "Nunca invente tales nombres; solo utilícelos como se documenta".
fuente
__double_leading_underscore
aún es público , la variable simplemente se renombra para evitar un choque.Los otros encuestados tienen razón al describir los guiones bajos dobles iniciales y finales como una convención de nomenclatura para métodos "especiales" o "mágicos".
Si bien puede llamar a estos métodos directamente (
[10, 20].__len__()
por ejemplo), la presencia de los guiones bajos es una pista de que estos métodos están destinados a ser invocados indirectamente (len([10, 20])
por ejemplo). La mayoría de los operadores de python tienen un método "mágico" asociado (por ejemplo,a[x]
es la forma habitual de invocara.__getitem__(x)
).fuente
Los nombres rodeados por guiones bajos dobles son "especiales" para Python. Se enumeran en la Referencia del lenguaje Python, sección 3, "Modelo de datos" .
fuente
En realidad, uso _ nombres de métodos cuando necesito diferenciar entre los nombres de clase principal y secundario. He leído algunos códigos que utilizan esta forma de crear clases padre-hijo. Como ejemplo, puedo proporcionar este código:
...
y el niño que tiene un método _worker
...
fuente
Esta convención se utiliza para variables o métodos especiales (el llamado "método mágico") como
__init__
y__len__
. Estos métodos proporcionan características sintácticas especiales o hacen cosas especiales.Por ejemplo,
__file__
indica la ubicación del archivo Python,__eq__
se ejecuta cuandoa == b
se ejecuta la expresión.Un usuario, por supuesto, puede hacer un método especial personalizado, que es un caso muy raro, pero a menudo puede modificar algunos de los métodos especiales incorporados (por ejemplo, debe inicializar la clase con
__init__
eso se ejecutará al principio cuando una instancia de una clase es creado).fuente
Se agregó un ejemplo para comprender el uso de __ en python. Aquí está la lista de Todos __
https://docs.python.org/3/genindex-all.html#_
Restricción de acceso usando __
fuente