Pregunta

He estado trabajando en un generador muy simple para pilones. Se me ocurrió algo que inspecciona

SomeClass._sa_class_manager.mapper.c

¿Está bien inspeccionar esto (o llamar a métodos que comienzan con un guión bajo)? Siempre asumí que esto es legal, aunque está mal visto, ya que depende en gran medida de la estructura interna de una clase / objeto. Pero bueno, ya que Python no tiene interfaces en el sentido de Java, tal vez esté bien.

¿Fue útil?

Solución

Es intencional (en Python) que no haya " privado " alcances Es una convención que todo lo que comience con un guión bajo no se use idealmente, y por lo tanto, no puede quejarse si su comportamiento o definición cambia en una próxima versión.

Otros consejos

En general, esto generalmente indica que el método es efectivamente interno, en lugar de ser parte de la interfaz documentada, y no se debe confiar en él. Las futuras versiones de la biblioteca son libres de cambiar el nombre o eliminar dichos métodos, por lo que si le interesa la compatibilidad futura sin tener que volver a escribir, evite hacerlo.

Si funciona, ¿por qué no? Sin embargo, podría tener problemas cuando se reestructure _sa_class_manager, se vincule a esta versión específica de SQLAlchemy o cree más trabajo para rastrear los cambios. Como SQLAlchemy es un objetivo en rápido movimiento, es posible que ya estés en un año.

La forma preferible sería integrar la API deseada en el propio SQLAlchemy.

En general, no es una buena idea, por las razones ya mencionadas. Sin embargo, Python permite deliberadamente este comportamiento en caso de que no haya otra forma de hacer algo.

Por ejemplo, si tiene una biblioteca compilada de Python de código cerrado en la que el autor no creía que necesitaría acceso directo al estado interno de un determinado objeto & # 8212; pero realmente lo hace & # 8212; todavía puede acceder a La información que necesitas. Tiene los mismos problemas mencionados antes de mantenerse al día con diferentes versiones (si tiene la suerte de que aún se mantenga), pero al menos puede hacer lo que quería hacer.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top