¿Es una convención prefijar clases privadas con guiones bajos?

He visto un código en el que las funciones / constantes están prefijadas con guiones bajos. Mi entendimiento es que esto indica que no deben usarse directamente. ¿Puedo hacer esto con clases?

class _Foo(object): pass class __Bar(object): pass 

Mejor solo usa un _ . Esto indica que un nombre es privado dentro de un módulo.

No se importa con el catch-all from import * , y tiene algunas otras características como “destrucción preferida”.

Desde aqui

Si __all__ no está definido, el conjunto de nombres públicos incluye todos los nombres encontrados en el espacio de nombres del módulo que no comienzan con un carácter de subrayado (‘ _ ‘).

Desde aqui

A partir de la versión 1.5, Python garantiza que los globales cuyo nombre comience con un solo guión bajo se eliminen de su módulo antes de que se eliminen otros globales.

Los miembros de la clase de inicio con doble guión bajo están alterados por su nombre .

Sí; el uso de un solo guión bajo es aprobado por PEP8 para clases de uso interno.

No creo que el uso del subrayado doble tenga ningún efecto real la mayor parte del tiempo, ya que se utiliza para activar la manipulación de nombres para los atributos de clase, y generalmente una clase no es un atributo de otra clase en cuyo caso Python alegrará el nombre por ti.)

Sí, y esto no es sólo una convención. Cuando import * desde este módulo, los nombres que comiencen con un guión bajo no se importarán.

Puede usar un solo guión bajo como primer carácter en cualquier variable, pero tiene el significado implícito, “No usar fuera de la clase / módulo a menos que realmente sepa lo que está haciendo” (por ejemplo, protegido / interno) y no se importará si usa from import * .

Usar un subrayado doble es algo que nunca deberías hacer fuera de una clase, ya que de otra manera podría meterse con la manipulación de nombres (y con “podría”, quiero decir, “me causó un gran dolor de cabeza la semana pasada porque no me di cuenta de que sí” ).