2009-11-05 16 views
7

Sto usando Komodo Edit per lo sviluppo Python e voglio ottenere il meglio dal completamento automatico.Completamento automatico di Komodo Python: digitare l'inferenza tramite metadati variabili?

Se faccio questo:

a = A() 
a. 

posso vedere un elenco dei membri del A.

Ma se faccio questo:

a = [A()] 
b = a[0] 
b. 

non funziona. Voglio essere in grado di fare questo:

a = [A()] 
b = a[0] 
"""b 

Type: A 
""" 
b. 

Quindi come posso dire il completamento automatico che b è di tipo A?

risposta

8

Questo in realtà non risponde alla tua domanda, ma con Wing IDE puoi dare suggerimenti al tipo di analizzatore con assert isinstance(b, A). Vedi here. Non ho trovato un modo per farlo con Komodo, anche se a quanto pare è possible quando si scrive PHP o JavaScript.

Aggiornamento:

Ho trovato un modo per ingannare Komodo in questo modo:

if 0: b=A() 

Questo funziona (almeno su Komodo 5.2) e non ha effetti collaterali, ma è sicuro confondere chi legge il tuo codice

+1

Che orribile hack! Sono solo geloso di averlo trovato prima :) Avrei fatto +1 se non l'avessi già fatto. –

+0

Penso che cambierò in Wing IDE. La sintassi assert isstance (b, A) funziona bene. –

+0

Sono felice di scoprire che funziona anche con il mio setup Emacs 24 + Jedi. –

3

Non credo che avrete molta fortuna con questo. Il problema è che è davvero abbastanza difficile inferire staticamente il tipo di variabili in Python tranne che nei casi più semplici. Spesso il tipo non è noto fino al momento dell'esecuzione e quindi il completamento automatico non è possibile.

L'IDE fa alcune analisi statica a lavorare fuori le congetture evidenti e migliori, ma scommetto che non è nemmeno provando per gli elementi in un contenitore. Anche se possiamo capire che b è di tipo A anche piccole variazioni al tuo codice possono renderlo inconoscibile, specialmente perché si trova in un contenitore mutevole.

inciso Ho provato questo sulla piena Komodo IDE ed è meglio è. Ho sentito che Wing IDE ha un eccellente completamento del codice, ma non sarei certo che potesse fare di meglio.

+0

Capisco che l'inferenza di tipo automatica sia difficile. Quello che voglio fare è inferenza di tipo manuale. Darei un'occhiata a Wing nel frattempo. –

+0

Ah, capisco ora. Il mio primo pensiero è stato affermare che interjay menzioni, ma non funziona per Komodo. L'unica cosa che riesco a lavorare è l'aggiunta di 'b = A (b)', ma è orribile, non è garantito che funzioni e abbia effetti collaterali. –

+0

totalmente d'accordo, penso che il completamento del codice non funzioni per i linguaggi per Python, quindi per quanto mi riguarda, sono sempre consapevole di cosa sta succedendo e SO – zinking

Problemi correlati