2008-09-30 8 views
3

J'ai travaillé sur un générateur de crud très simple pour les pylônes. Je suis venu avec quelque chose qui inspecteEst-il correct d'inspecter les propriétés commençant par un trait de soulignement?

SomeClass._sa_class_manager.mapper.c 

est-il autorisé à inspecter ce (ou d'appeler des méthodes avec commançant underscore)? J'ai toujours supposé que c'était légal, bien que mal vu, car il dépend fortement de la structure interne d'une classe/d'un objet. Mais bon, puisque python n'a pas vraiment d'interfaces au sens de Java, c'est peut-être OK.

Répondre

8

Il est intentionnel (en Python) qu'il n'y ait pas d'étendues "privées". C'est une convention que tout ce qui commence par un trait de soulignement ne devrait pas idéalement être utilisé, et donc vous ne pouvez pas vous plaindre si son comportement ou sa définition change dans une prochaine version.

0

Si ça marche, pourquoi pas? Vous pourriez avoir des problèmes quand _sa_class_manager est restructuré, vous liant à cette version spécifique de SQLAlchemy, ou créant plus de travail pour suivre les changements. Comme SQLAlchemy est une cible en évolution rapide, vous pouvez être déjà là dans un an.

Le meilleur moyen serait d'intégrer l'API souhaitée dans SQLAlchemy lui-même.

8

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

0

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 d'autre moyen de faire quelque chose.

Par exemple, si vous avez une source fermée compilé bibliothèque Python où l'auteur n'a pas pensé que vous auriez besoin d'un accès direct à un certain état interne de l'objet — mais vous avez vraiment — vous pouvez toujours obtenir à l'information que vous avoir besoin. Vous avez les mêmes problèmes mentionnés précédemment de suivre différentes versions (si vous êtes assez chanceux que c'est toujours maintenu) mais au moins vous pouvez réellement faire ce que vous vouliez faire.

Questions connexes