我怎么能告诉PyCharm什么类型的参数是预期的?

问题:

当涉及构造函数,赋值和方法调用时,PyCharm IDE很好地分析我的源代码,并找出每个变量应该是什么类型的。我喜欢它,当它是对的,因为它给我很好的代码完成和参数信息,它给我警告,如果我尝试访问不存在的属性。
但是当涉及参数时,它什么都不知道。代码完成下拉列表不能显示任何内容,因为它们不知道参数将是什么类型。代码分析不能查找警告。

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

这有一定的意义。其他通话网站可以传递该参数的任何内容。但是,如果我的方法期望一个参数是类型,例如pygame.Surface,我希望能够以PyCharm的形式表明,所以它可以在代码完成中显示Surface的所有属性如果我调用错误的方法,等等,然后突出显示警告。
有没有办法给PyCharm一个提示,并说“psst,这个参数应该是X类型”? (或者也许,在动态语言的精神上,“这个参数应该像X一样嘎嘎作声”,我会很好的。)
 编辑: CrazyCoder的答案在下面,是诀窍。对于像我这样想要快速总结的任何新手,这里是:

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.

相关部分是文本字符串的@type peasant: Person行。
如果您还要转到“文件”>“设置”>“Python集成工具”,并将“Docstring格式”设置为“Epytext”,则PyCharm的“查看”>“快速文档查找”将会漂亮地打印参数信息,而不是按原样打印所有的@ -lines。

回答:

是的,您可以使用特殊文档格式的方法及其参数,以便PyCharm可以知道类型。最近PyCharm版本supports most common doc formats
例如,PyCharm从@param style comments中提取类型
另见reStructuredTextdocstring conventions(PEP 257)。
另一个选项是Python 3注释。
refer to the PyCharm documentation section了解详情和样品。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: How can I tell PyCharm what type a parameter is expected to be?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

16 − 12 =