2012-08-30 14 views

Respuesta

19

__...__ significa reservado Python nombre (ambos en nombres de archivo y en otros nombres). No debe inventar sus propios nombres usando la notación de doble guión bajo; y si usa existentes, tienen una funcionalidad especial.

En este ejemplo particular, __init__.py define la unidad "principal" para un paquete; también hace que Python trate el directorio específico como un paquete. Es la unidad que se utilizará cuando llame al import cherryPy (y cherryPy es un directorio). Esto se explica brevemente en el Modules tutorial.

Otro ejemplo es el método __eq__ que proporciona una comparación de igualdad para una clase. Puede llamar a esos métodos directamente (y los usa implícitamente cuando usa el operador ==, por ejemplo); sin embargo, las versiones más nuevas de Python pueden definir más métodos de este tipo y, por lo tanto, no debe inventar sus propios nombres __ porque podrían colisionar. Puede encontrar una lista bastante detallada de dichos métodos en Data model documentos.

_... se usa a menudo como nombre 'interno'. Por ejemplo, los módulos que comiencen con _ no se deben usar directamente; de manera similar, los métodos con _ son supuestamente privados, etc. Es solo una convención, pero debes respetarla.

+4

No tiene expresamente prohibido inventar sus propios nombres.Está * desaconsejado * porque el lenguaje podría agregar más nombres de este tipo en el futuro, por lo que el espacio de nombres está reservado. El uso de los nombres '__...__' para sus propios proyectos es bajo su propio riesgo. –

+2

@MartijnPieters: vale, reemplazó eso con 'should not'. –

7

__init__.py es un archivo especial que, cuando existe en una carpeta, convierte esa carpeta en un módulo. Al importar el módulo, se ejecuta __init__.py. El otro es solo una convención de nombres, pero supongo que esto diría que no debería importar ese archivo directamente.

Echa un vistazo aquí: 6.4. Packages para una explicación de cómo crear módulos.

Regla general: si algo en Python es namend __anything__, entonces es algo especial y deberías leer sobre él antes de usarlo (por ejemplo, funciones mágicas).

11

Estos, y otros, convenciones de nombres se describen en detalle en Style Guide for Python Code - Descriptive: Naming Styles

Brevemente:

  • __double_leading_and_trailing_underscore__: objetos "mágicos" o atributos que viven en espacios de nombres controlados por el usuario. P.ej. __init__, __import__ o __file__. Nunca inventes tales nombres; solo utilícelos según lo documentado.
  • _single_leading_underscore: indicador de "uso interno" débil. P.ej. from M import * no importa objetos cuyo nombre comience con un guión bajo.
Cuestiones relacionadas