É OK para inspecionar propriedades que começam com sublinhado?
-
02-07-2019 - |
Pergunta
Eu tenho trabalhado em um gerador de CRUD muito simples para postes. Eu vim com algo que inspeciona
SomeClass._sa_class_manager.mapper.c
É ok para inspecionar este (ou para chamar métodos começando com sublinhado)? Eu sempre meio que assumiu este é legal embora desaprovado, pois depende muito da estrutura interna de uma classe / objeto. Mas hey, desde python realmente não têm interfaces no sentido Java talvez seja OK.
Solução
É intencional (em Python) que não há âmbitos "privadas". É uma convenção que qualquer coisa que começa com um sublinhado não deveriam idealmente ser utilizados, e, portanto, você não pode reclamar se o seu comportamento ou de definição de mudanças em uma próxima versão.
Outras dicas
Em geral, isso geralmente indica que o método é efetivamente interna, em vez de parte da interface documentada, e não deve ser invocado. Futuras versões da biblioteca é livre para mudar o nome ou remover tais métodos, por isso, se você se preocupa com o futuro compatibilidade sem ter que reescrever, evitar fazê-lo.
Se ele funciona, por que não? Você pode ter problemas embora quando _sa_class_manager se reestruturado,-se a ligação a esta versão específica do SQLAlchemy, ou a criação de mais trabalho para acompanhar as mudanças. Como SQLAlchemy é um alvo em movimento rápido, você pode estar lá em um ano já.
A forma preferível seria a de integrar o API desejada em si SQLAlchemy.
Geralmente não é uma boa idéia, por razões já mencionadas. No entanto, o Python permite que deliberadamente esse comportamento no caso, não há outra maneira de fazer alguma coisa.
Por exemplo, se você tem um closed-fonte compilado biblioteca Python onde o autor não acho que você precisa acesso directo ao interior de um determinado objeto de estado, mas você realmente fazer-você ainda pode obter a informação que você precisa . Você tem os mesmos problemas mencionados antes de manter-se com versões diferentes (se você é o suficiente sorte que ainda é mantido), mas pelo menos você pode realmente fazer o que você queria fazer.