2015-10-20 24 views
13
def someproperty(self, value): 
    """ 
    :type value: int 
    """ 
    assert isinstance(value, int) 
    # other stuff 

Vorrei che Pycharm affermasse quando l'utente imposta il valore su qualcosa di diverso da un int. Sto già usando un suggerimento tipo. C'è un altro modo per ottenere questa funzionalità? Grazie in anticipo per qualsiasi suggerimento che possiate fornire.È possibile avere asserzioni di tipo statico in PyCharm?

+0

Forse quando PyCharm supporta [PEP 484] (https://www.python.org/dev/peps/pep-0484/)? –

risposta

11

Usando PyCharm è possibile ottenere un po 'vicino a una verifica di tipo statico, con dichiarazioni di tipo e di aumentare la gravità della ispezione "Tipo checker":

enter image description here

Questo renderà controlli di tipo molto prominente nel codice :

enter image description here

8

Python recentemente ha avuto un grande sviluppo intorno tipizzazione statica. A partire da Python 3.5, i suggerimenti di tipo sono una cosa. Questo è ciò che era PEP 0484. La sintassi del suggerimento del tipo si basa completamente sulla sintassi dell'annotazione della funzione che è stata introdotta in precedenza con PEP 3107. Ciò ha permesso a PEP 0484 di essere un cambiamento che non comportava una nuova sintassi che lo rende molto attraente e facile da adattare.

Quindi, come funziona? La sintassi è in realtà piuttosto intuitiva per i casi semplici. Ad esempio:

def greeting(name: str) -> str: 
    return 'Hello ' + name 

Il sistema di suggerimento del tipo supporta anche le cose molto complicate. Puoi anche usare tipi di utenti, callable, sovraccarichi multipli usando i sindacati, anche tipi generici. Puoi vedere molti esempi nel PEP stesso.

Puoi anche guardare Guido van Rossum’s talk in merito al tipo di suggerimento all'ultimo PyCon, è davvero interessante e copre molti dettagli.

Infine, con tutti questi suggerimenti di tipo, cosa facciamo con loro? Bene, c'è questa grande libreria che esiste da un po ', ben prima di Python 3.5 e PEP 0484. In realtà, la sintassi di suggerimento del tipo che è stata introdotta ufficialmente ora si basa su quella libreria, ma è appena stata formalizzata. La libreria è chiamata mypy ed è fondamentalmente un controllo di tipo statico per Python. Una volta installato, è possibile utilizzare l'eseguibile mypy per digitare il controllo di qualsiasi script Python che contiene annotazioni di tipo.

Per esempio, mettiamo sopra definizione di funzione in un file, e lo chiamano con gli argomenti di tipo sbagliato:

greeting(123) 

mypy sul file in esecuzione, ha pronunciato la seguente uscita:

$ mypy test.py 
test.py:4: error: Argument 1 to "greeting" has incompatible type "int"; expected "str" 

mypy, mentre tecnicamente sperimentale, è uno strumento molto potente che funziona davvero bene. Se ti piace questa cosa e adotteresti annotazioni di tipo, dovresti verificarlo davvero.

+1

È possibile integrarlo con PyCharm? –

+1

@ DagHøidahl Secondo [questa pagina] (https://www.jetbrains.com/pycharm/help/type-hinting-in-pycharm.html) e alcune altre fonti che ho trovato, digitare i suggerimenti usando le annotazioni di funzione sono effettivamente supportati per completamento del codice.È solo la convalida con Mypy che dovrebbe essere eseguita separatamente. – poke

1

PyCharm 5 seems to support PEP 484. Una risposta a questa domanda per PyCharm 5 e Python 3.5 è quindi l'uso del tipo suggerimento.

Problemi correlati