Quando si tratta di costruttori, assegnazioni e chiamate di metodi, l'IDE di PyCharm è abbastanza bravo nell'analizzare il mio codice sorgente e nel capire quale tipo dovrebbe essere ogni variabile. Mi piace quando è giusto, perché mi dà un buon completamento del codice e informazioni sui parametri e mi dà avvisi se provo ad accedere ad un attributo che non esiste.
Ma quando si tratta di parametri, non sa nulla. I menu a discesa di completamento del codice non possono mostrare nulla, perché non sanno quale tipo sarà il parametro. L'analisi del codice non può cercare avvisi.
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
peasant = Person("Dennis", 37)
# PyCharm knows that the "peasant" variable is of type Person
peasant.dig_filth() # shows warning -- Person doesn't have a dig_filth method
class King:
def repress(self, peasant):
# PyCharm has no idea what type the "peasant" parameter should be
peasant.knock_over() # no warning even though knock_over doesn't exist
King().repress(peasant)
# Even if I call the method once with a Person instance, PyCharm doesn't
# consider that to mean that the "peasant" parameter should always be a Person
Questo ha un certo senso. Altri siti di chiamata potrebbero passare qualsiasi cosa per quel parametro. Ma se il mio metodo prevede che un parametro sia di tipo, diciamo, pygame.Surface
mi piacerebbe essere in grado di indicarlo a PyCharm in qualche modo, quindi può mostrarmi tutti Surface
gli attributi nel suo elenco a discesa di completamento del codice e evidenziare gli avvisi se Chiamo il metodo sbagliato, e così via.
C'è un modo in cui posso dare un suggerimento a PyCharm e dire "psst, questo parametro dovrebbe essere di tipo X"? (O forse, nello spirito dei linguaggi dinamici, "questo parametro dovrebbe ciarlare come una X"? Starei bene con quello.)
EDIT: la risposta di CrazyCoder, di seguito, fa il trucco. Per tutti i nuovi arrivati come me che desiderano un breve riepilogo, eccolo qui:
class King:
def repress(self, peasant):
"""
Exploit the workers by hanging on to outdated imperialist dogma which
perpetuates the economic and social differences in our society.
@type peasant: Person
@param peasant: Person to repress.
"""
peasant.knock_over() # Shows a warning. And there was much rejoicing.
La parte rilevante è la @type peasant: Person
linea della dotstring.
Se vai anche su File> Impostazioni> Strumenti integrati di Python e imposti "Formato Docstring" su "Epytext", la vista Visualizzazione rapida> Documentazione di PyCharm stamperà piuttosto le informazioni sui parametri invece di stampare tutte le linee @ così come sono.
@param xx: yyy
diventa:param xx: yyy
. Vedi jetbrains.com/pycharm/webhelp/…