最佳答案
当涉及到构造函数、赋值和方法调用时,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.
相关的部分是 docstring 的 @type peasant: Person
行。
如果你也点击 File > Settings > Python Integration Tools 并将“ Docstring format”设置为“ Epytext”,那么 PyCharm 的 View > Quick Document Lookup 将会漂亮地打印参数信息,而不是仅仅打印所有的@- line。