Domanda

Ho lavorato su un generatore di roud molto semplice per i piloni. Ho pensato a qualcosa che ispeziona

SomeClass._sa_class_manager.mapper.c

Va ??bene ispezionarlo (o chiamare metodi che iniziano con il trattino basso)? Ho sempre supposto che questo fosse legale, anche se disapprovato dal momento che si basa fortemente sulla struttura interna di una classe / oggetto. Ma hey, dal momento che Python non ha davvero interfacce in senso Java forse è OK.

È stato utile?

Soluzione

È intenzionale (in Python) che non ci siano " private " ambiti. È una convenzione che tutto ciò che inizia con un carattere di sottolineatura non dovrebbe essere idealmente usato, e quindi non puoi lamentarti se il suo comportamento o la sua definizione cambiano in una versione successiva.

Altri suggerimenti

In generale, questo di solito indica che il metodo è effettivamente interno, piuttosto che parte dell'interfaccia documentata, e su cui non si deve fare affidamento. Le versioni future della libreria sono libere di rinominare o rimuovere tali metodi, quindi se ti interessa la compatibilità futura senza dover riscrivere, evita di farlo.

Se funziona, perché no? Potresti avere problemi anche quando _sa_class_manager viene ristrutturato, associandoti a questa versione specifica di SQLAlchemy o creando più lavoro per tenere traccia delle modifiche. Dato che SQLAlchemy è un obiettivo in rapido movimento, potresti essere lì già tra un anno.

Il modo preferibile sarebbe integrare l'API desiderata in SQLAlchemy stesso.

In genere non è una buona idea, per motivi già menzionati. Tuttavia, Python consente deliberatamente questo comportamento nel caso in cui non ci sia altro modo di fare qualcosa.

Ad esempio, se hai una libreria Python compilata a sorgente chiuso in cui l'autore non pensava che avresti avuto bisogno dell'accesso diretto allo stato interno di un determinato oggetto & # 8212; ma in realtà & # 8212; puoi ancora arrivare a le informazioni di cui hai bisogno. Hai gli stessi problemi menzionati prima di tenere il passo con versioni diverse (se sei abbastanza fortunato da mantenerlo ancora) ma almeno puoi effettivamente fare quello che volevi fare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top