dictionaries - python functions
Diferencia entre "__method__" y "method" (7)
Esta pregunta ya tiene una respuesta aquí:
¿Cuál es la diferencia entre __method__
, method
y _method__
?
¿Hay alguna o alguna razón aleatoria por la que las personas pensaban que __doc__
debería ser así en lugar de doc
? ¿Qué hace que un método sea más especial que el otro?
Algunos métodos con un doble subrayado prefijo y sufijo son especiales. Por ejemplo, __init__
se __init__
siempre que se crea una instancia de esa clase, y se llama __str__
cuando se va a imprimir el objeto. Básicamente, pueden ser llamados de maneras especiales. Puede usarlos como cualquier otro método, o puede invocarlos a través de la forma especial asociada a ellos.
No sé sobre las funciones globales de doble subrayado (que no pertenecen a ninguna clase), pero creo que no las hay.
El patrón de __name__
indica métodos "mágicos". Estos son llamados por varias funciones como
str(x) -> x.__str__()
repr(x) -> x.__repr__()
x[0] -> x.__getitem__(0)
etc
Un único prefijo de subrayado es para indicar un atributo privado, y solo se sigue por convención.
un doble prefijo de subrayado inicia el cambio de nombre, donde el atributo denominado __attr se cambia a __Class_attr al crear la instancia.
El patrón que tienes de _method__ no se usa realmente para nada.
Estas son todas las convenciones, por lo que no se aplican de todos modos. Aún así, normalmente puede esperar:
__somename__
Algo definido en la especificación del lenguaje python en sí. No use esto en su propio nombre.
_somename
Normalmente se supone que esto se debe llamar a través de un mecanismo diferente en lugar de hacerlo directamente. Similar a declarar algo privado en la mayoría de los otros idiomas, pero no aplicado de ninguna manera.
__somename
En realidad, se supone que no se debe invocar directamente, y se destruye internamente para evitar que lo haga de forma accidental. Si realmente necesita llamarlo por algún motivo, consulte la documentación para averiguar cómo.
Cualquiera de los anteriores puede aplicarse igualmente a nombres de funciones, variables o clases.
Estos métodos fueron nombrados como tales para reducir la posibilidad de nombrar colisiones.
Los métodos precedidos y prefijados con el doble guión bajo generalmente están marcados para indicar que son parte de la especificación del lenguaje Python.
-
__method
: método privado. -
__method__
: método especial de Python. Se nombran así para evitar colisiones de nombres. Consulte esta página para obtener una lista de estos métodos especiales. -
_method
: esta es la convención de nomenclatura recomendada para métodos protegidos en la guía de estilo de Python .
De la guía de estilo:
_single_leading_underscore
: indicador de "uso interno" débil. Por ejemplo,from M import *
no se importan objetos cuyo nombre comienza con un guión bajo.
single_trailing_underscore_
: utilizado por convención para evitar conflictos con la palabra clave Python, por ejemplo
Tkinter.Toplevel(master, class_=''ClassName'')
__double_leading_underscore
: cuando se nombra un atributo de clase, se invoca el mangle del nombre (dentro de la claseFooBar
, __boo se convierte en_FooBar__boo
; ver a continuación).
__double_leading_and_trailing_underscore__
: objetos o atributos "mágicos" que viven en espacios de nombres controlados por el usuario. Por__init__
,__init__
,__import__
o__file__
. Nunca inventes tales nombres; solo utilícelos según lo documentado.
-
method
es solo un método normal -
_method
debe llamarse a menos que sepa lo que está haciendo, lo que normalmente significa que usted mismo ha escrito el método. -
__method
los 2 guiones bajos se usan para evitar la manipulación de nombres. Atributos o métodos como este son accesibles a través deinstance._ClassName__method
. Aunque mucha gente lo llama "privado", no lo es. Nunca debe usar esto para evitar que alguien acceda a este método, use_method
en_method
lugar. -
__method__
se usa para métodos especiales que modifican el comportamiento de la instancia. No nombre sus propios métodos como este.