functions dictionaries python methods

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.


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 clase FooBar , __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 de instance._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.