Quando se trata de construtores, atribuições e chamadas de método, o PyCharm IDE é muito bom em analisar meu código-fonte e descobrir qual tipo cada variável deve ser. Gosto quando está certo, porque fornece boas informações de conclusão de código e parâmetros, além de avisos se tentar acessar um atributo que não existe.
Mas quando se trata de parâmetros, nada sabe. As listas suspensas de conclusão de código não podem mostrar nada, porque não sabem que tipo de parâmetro será. A análise de código não pode procurar avisos.
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
Isso faz um certo sentido. Outros sites de chamadas podem transmitir qualquer coisa para esse parâmetro. Mas se meu método espera que um parâmetro seja do tipo, por exemplo, pygame.Surface
eu gostaria de poder indicar isso ao PyCharm de alguma forma, para que ele possa me mostrar todos Surface
os atributos de seu menu suspenso de conclusão de código e destacar avisos se Eu chamo o método errado e assim por diante.
Existe uma maneira de dar uma dica ao PyCharm e dizer "psst, esse parâmetro deve ser do tipo X"? (Ou talvez, no espírito das linguagens dinâmicas, "esse parâmetro deva aparecer como um X"? Eu ficaria bem com isso.)
EDIT: resposta CrazyCoder, abaixo, faz o truque. Para os novatos como eu que desejam um resumo rápido, aqui está:
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.
A parte relevante é a @type peasant: Person
linha da doutrina.
Se você também for em Arquivo> Configurações> Ferramentas Integradas do Python e definir "Formato da Docstring" como "Epytext", o Modo de Exibição do PyCharm> Pesquisa Rápida de Documentação imprimirá as informações do parâmetro em vez de apenas imprimir todas as linhas @ como estão.
@param xx: yyy
torna - se:param xx: yyy
. Veja jetbrains.com/pycharm/webhelp/…