当涉及到构造函数、赋值和方法调用时,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在其代码完成下拉列表中向我显示所有的属性,并突出显示警告如果我调用了错误的方法,等等。
pygame.Surface
Surface
有没有办法可以给 PyCharm 一个提示,并说“psst,这个参数应该是类型X”?(或者,也许,本着动态语言的精神,“这个参数应该像“一样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行。
@type peasant: Person
如果您还转到“文件”>“设置”>“Python 集成工具”并将“Docstring 格式”设置为“Epytext”,那么 PyCharm 的“视图”>“快速文档查找”将漂亮地打印参数信息,而不仅仅是按原样打印所有 @-lines。
是的,您可以对方法及其参数使用特殊的文档格式,以便 PyCharm 可以知道类型。最近的 PyCharm 版本支持最常见的文档格式。
例如,PyCharm 从@param 样式的注释中提取类型。
另请参阅reStructuredText和文档字符串约定(PEP 257)。
另一种选择是 Python 3 注释。
有关更多详细信息和示例,请参阅 PyCharm 文档部分。