GeeksforGeeks

Requisito previo: Subrayado en Python
En Python, no existe la existencia de variables de instancia «Privadas» a las que no se puede acceder sino dentro de un objeto. Sin embargo, la mayoría de los codificadores de Python siguen una convención: un nombre prefijado con un guión bajo, por ejemplo _geek, debe ser tratado como una parte no pública de la API o de cualquier código de Python, ya sea una función, un método o un miembro de datos. Mientras repasamos esto también intentaremos entender el concepto de varias formas de guiones bajos finales, por ejemplo, for _ in range(10), __init__(self).

Mangling y cómo funciona

En Python, existe algo llamado name mangling, que significa que hay un soporte limitado para un caso de uso válido para los miembros privados de una clase, básicamente para evitar choques de nombres con nombres definidos por subclases. Cualquier identificador de la forma __geek (al menos dos guiones bajos iniciales o como máximo un guión bajo final) se sustituye por _nombreclase__geek, donde nombreclase es el nombre actual de la clase con un guión bajo inicial eliminado. Siempre que ocurra dentro de la definición de la clase, esta manipulación se realiza. Esto es útil para permitir que las subclases anulen métodos sin romper las llamadas a métodos intraclase.
Veamos este ejemplo y tratemos de averiguar cómo funciona este subrayado:

Las reglas de manipulación están diseñadas principalmente para evitar accidentes, pero todavía es posible acceder o modificar una variable que se considera privada. Esto puede ser incluso útil en circunstancias especiales, como en el depurador.

_Subrayado simple

Así que, básicamente, un subrayado al principio de un método, función o miembro de datos significa que no deberías acceder a este método porque no es parte de la API. Veamos este fragmento de código:

El fragmento está tomado del código fuente de Django (django/forms/forms.py). Esto sugiere que los errores son una propiedad, y también es una parte de la API, pero el método, _get_errors, es «privado», por lo que no se debe acceder a él.

__Doble subrayado inicial

Dos subrayados, al principio, causan mucha confusión. Se trata de una cuestión de sintaxis más que de una convención. El doble guión bajo manosea los nombres de los atributos de una clase para evitar conflictos de nombres de atributos entre clases. Por ejemplo:

__Doble guión bajo inicial y doble guión bajo final__

Hay otro caso de doble guión bajo inicial y final. Seguimos esto mientras usamos variables o métodos especiales (llamados «método mágico») como__len__, __init__. Estos métodos proporcionan características sintácticas especiales a los nombres. Por ejemplo, __file__ indica la ubicación del archivo Python, __eq__ se ejecuta cuando se ejecuta la expresión a == b.
Ejemplo:

Python

classGeek:
def__init__(self, ab):
self.ab =ab
def__custom__(self):
pass



This article is contributed by Chinmoy Lenka. Si te gusta GeeksforGeeks y quieres contribuir, también puedes escribir un artículo en contribute.geeksforgeeks.org o enviarlo por correo a [email protected]. Verás tu artículo aparecer en la página principal de GeeksforGeeks y ayudarás a otros Geeks.
He remitido a Python Docs, hackernoon.com e igorsobreira.com
Por favor, escribe comentarios si encuentras algo incorrecto, o quieres compartir más información sobre el tema tratado anteriormente.

¡Atención geek! Refuerza tus bases con el Curso de Fundamentos de Programación en Python y aprende lo más básico.

Para empezar, tu preparación para la entrevista Mejora tus conceptos de Estructuras de Datos con el Curso DS de Python.

Etiquetas del artículo :