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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top