2014-09-19 8 views
10

Desidero spostare una variabile dall'ambito locale al livello oggetto. Il nuovo codice dovrebbe utilizzare self.user e non user come prima:Refactor con pyCharm da "user" a "self.user"

class Foo(object): 
    def test_foo(self): 
     user=User() 
     ... 
     user.do() 

nuovo codice dovrebbe essere simile:

class Foo(object): 
    def test_foo(self): 
     self.user=User() # I can remove this line by hand 
     ... 
     self.user.do() 

ho cercato di refactoring >> rinominare user-self.user ma PyCharm dice: "identificativo inserito non è valido "

Come posso effettuare il refactoring con pyCharm?

risposta

6

cosa si sta cercando di fare è non una semplice ridenominazione, ma la creazione di una nuova istanza attribuire. In quanto tale, invece di utilizzare Rename è necessario utilizzare Estrai> Campo voce di menu. In alternativa, è possibile accedere a questo refactoring come Ctrl +Alt +F (questo dipende dalle scorciatoie che avete scelto. Il mio è il default per KDE).

+0

Aiutami a capire come funziona * Extract> Field *. Cambia la variabile da, diciamo, * foo * a * self.foo * nel punto in cui è invocata, ma per quanto posso dire non lo cambia da nessun'altra parte nel codice. Inoltre, quando lo invoco, diciamo, * bar *, il campo di immissione del testo si apre con * self.l * e devo ridigitare * bar *. Qualcosa mi dice che non lo capisco correttamente. Quello che voglio è sostituire * foo * con * foo.bar * in tutti i punti appropriati del codice senza dover fare un errore * Trova/Sostituisci " – garyp

+0

PyCharm non ha modo di sapere che una variabile locale, con lo stesso nome, è pensato per essere trattato allo stesso modo di uno che si sta rinominando. Si potrebbe avere un 'utente' in una funzione diversa che fa riferimento a qualcosa di diverso. Per quanto ne so, quello che vuoi è trovare e sostituire. Puoi fare in modo che PyCharm chieda conferma se vuoi essere sicuro. – Bakuriu