Forum >> Programmazione Python >> Calcolo scientifico >> Decoratore set_module di numpy e __module__

Pagina: 1

Ciao a tutti,
Come da titolo mi interessava qualche chiarimento sul decoratore set_module di numpy, in particolare qual'è il vantaggio di cambiare __module__ in una funzione o classe? Può aiutare nel amministrare il codice in differenti moduli?

Grazie a tutti in anticipo
Può sicuramente aiutarti a complicarti la vita. Mi sembra che tu stia facendo il tour delle feature più oscure e meno documentate, per scommessa. Queste cose sono fatte per scenari di introspezione, e/o per fornire api consistenti mascherando dettagli implementativi (una funzione definita in un posto per certe ragioni tecniche irrinunciabili, ma che deve sembrare in un altro posto).


Se il problema è organizzare il codice in modo semplice ed efficiente, la soluzione è organizzare il codice in modo semplice ed efficiente, non usare __module__.

https://leanpub.com/capirewxpython : Capire wxPython, il mio libro
https://pythoninwindows.blogspot.com : Python in Windows, il mio blog e le mie guide
Be diciamo che sono curioso e mi piace capire :D.. Il mio caso dovrebbe proprio a servire per creare un api discretamente estesa e mascherare dettagli implementativi mi alletta.. Riesci a farmi capire magari con un esempio come funziona? (che poi forse una volta capito come funziona scopro pure che non mi serve..)
mi spiego meglio, nel mio caso per mera comodità stò suddividendo le differenti funzioni in diversi moduli.


Tuttavia vorrei che tutte queste funzioni siano utilizzabili come appartenenti al modulo radice.

Mi spiego meglio con un esempio relativamente a Numpy;

dopo avere importato numpy come np, se vogliamo creare un array unitario possiamo utilizzare la funzione np.ones... però ones in realtà non apprtiene a numpy.py ma a matlib.py all'interno del package numpy... com'è possibile ottenere questo effetto?

in modo analogo (ma presumibilmente questa cosa è ottenuta in modo differente dal caso precedente ed utilizzando @set_module) se vogliamo creare un matrix possiamo utilizzare np.matrix e non np.matrixlib.defmatrix.matrix ( :confused:)...

Nel mio caso in modo analogo a livello di utilizzo vorrei che queste funzioni appartenenti tutte alla stessa famigliola di funzioni siano utilizzabili come se fossero tutte presenti nel modulo principale.

cerca quante volte __module__ è usato nella libreria standard di python, e cerca la definizione di set_module nel sorgente di numpy, e dove è usato in numpy. Use the source, Luke.
https://leanpub.com/capirewxpython : Capire wxPython, il mio libro
https://pythoninwindows.blogspot.com : Python in Windows, il mio blog e le mie guide
si l'ho trovato proprio controllando il sorgente.... però ho domandato proprio perchè non mi è chiarissimo com' è utilizzato... in ogni modo farò qualche prova proprio solo per capire come funziona



Penso inoltre di aver capito come rendono possibile importare solo tramite numpy. le funzioni presenti dei differenti moduli (più o meno annidati) nel package.. in pratica definiscono le variabili __all__ nel modulo delle funzioni che si vuole portare alla root e tramite i file __init__ e degli import * portano le funzioni a livello radice.



Direi che è semplice ed efficace e tra l'altro... mi permetterebbe di togliere quella struttura del codice che se ti ricordi RicPol non ti piaceva :D... e tutto risulterebbe più pulito (quindi senza architetture più "strane") e ben distribuito nei vari moduli.



--- Ultima modifica di Bibo90 in data 2019-03-12 17:35:22 ---


Pagina: 1



Esegui il login per scrivere una risposta.