Question

Je travaille sur un générateur de bûches très simple pour les pylônes. Je suis venu avec quelque chose qui inspecte

SomeClass._sa_class_manager.mapper.c

Est-ce correct d'inspecter cela (ou d'appeler des méthodes commençant par un trait de soulignement)? J'ai toujours en quelque sorte supposé que c'était légal bien que désapprouvé car cela dépendait beaucoup de la structure interne d'une classe / d'un objet. Mais bon, vu que python n’a pas vraiment d’interfaces au sens Java, c’est peut-être OK.

Était-ce utile?

La solution

C’est intentionnel (en Python) qu’il n’existe pas de "privé". portées. C’est une convention selon laquelle tout ce qui commence par un trait de soulignement ne devrait pas être utilisé de manière idéale. Par conséquent, vous ne pouvez pas vous plaindre si son comportement ou sa définition change dans une prochaine version.

Autres conseils

En général, cela indique généralement que la méthode est effectivement interne, et non une partie de l'interface documentée, et ne doit pas être utilisée. Les versions futures de la bibliothèque sont libres de renommer ou de supprimer de telles méthodes. Par conséquent, si vous vous souciez de la compatibilité future sans avoir à réécrire, évitez de le faire.

Si cela fonctionne, pourquoi pas? Vous pourriez avoir des problèmes quand _sa_class_manager est restructuré, en vous liant à cette version spécifique de SQLAlchemy ou en créant plus de travail pour suivre les changements. SQLAlchemy étant une cible en évolution rapide, il se peut que vous y soyez déjà dans un an.

Le meilleur moyen serait d'intégrer votre API souhaitée à SQLAlchemy même.

Ce n’est généralement pas une bonne idée, pour les raisons déjà mentionnées. Cependant, Python autorise délibérément ce comportement au cas où il n’y aurait pas moyen de faire autre chose.

Par exemple, si vous avez une bibliothèque Python compilée à source fermée dans laquelle l'auteur ne pensait pas avoir besoin d'un accès direct à l'état interne d'un objet donné mais que vous avez vraiment & 8212; vous pouvez toujours accéder à les informations dont vous avez besoin. Vous avez les mêmes problèmes que ceux mentionnés précédemment de maintenir des versions différentes (si vous avez la chance de le conserver), mais au moins, vous pouvez réellement faire ce que vous voulez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top