Wenn es um Konstruktoren, Zuweisungen und Methodenaufrufe geht, kann die PyCharm-IDE meinen Quellcode ziemlich gut analysieren und herausfinden, welcher Typ jede Variable sein sollte. Ich mag es, wenn es richtig ist, weil es mir gute Code-Vervollständigungs- und Parameterinformationen gibt und mir Warnungen gibt, wenn ich versuche, auf ein Attribut zuzugreifen, das nicht existiert.
Aber wenn es um Parameter geht, weiß es nichts. Die Dropdowns für die Code-Vervollständigung können nichts anzeigen, da sie nicht wissen, welcher Typ der Parameter sein wird. Die Code-Analyse kann nicht nach Warnungen suchen.
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
Dies macht einen gewissen Sinn. Andere Aufrufstellen könnten für diesen Parameter alles übergeben. Wenn meine Methode jedoch erwartet, dass ein Parameter vom Typ ist, pygame.Surface
möchte ich PyCharm dies irgendwie anzeigen können, damit ich alle Surface
Attribute in der Dropdown-Liste zur Code-Vervollständigung anzeigen und Warnungen hervorheben kann, wenn Ich nenne die falsche Methode und so weiter.
Gibt es eine Möglichkeit, PyCharm einen Hinweis zu geben und zu sagen "psst, dieser Parameter soll vom Typ X sein"? (Oder vielleicht, im Geiste dynamischer Sprachen, "soll dieser Parameter wie ein X quaken"? Damit wäre ich einverstanden.)
EDIT: Die Antwort von CrazyCoder unten macht den Trick. Für alle Neulinge wie mich, die eine kurze Zusammenfassung wünschen, ist hier:
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.
Der relevante Teil ist die @type peasant: Person
Zeile der Dokumentzeichenfolge.
Wenn Sie auch zu Datei> Einstellungen> Integrierte Python-Tools gehen und "Docstring-Format" auf "Epytext" setzen, druckt PyCharms Ansicht> Schnelle Dokumentationssuche die Parameterinformationen hübsch aus, anstatt nur alle @ -Zeilen wie sie sind zu drucken.
@param xx: yyy
wird:param xx: yyy
. Siehe jetbrains.com/pycharm/webhelp/…