Jeśli chodzi o konstruktory, przypisania i wywołania metod, IDE PyCharm jest całkiem niezłe w analizowaniu mojego kodu źródłowego i określaniu, jakiego typu powinna być każda zmienna. Podoba mi się, gdy jest to poprawne, ponieważ zapewnia mi dobre uzupełnienie kodu i informacje o parametrach oraz ostrzega mnie, gdy próbuję uzyskać dostęp do atrybutu, który nie istnieje.
Ale jeśli chodzi o parametry, to nic nie wie. Listy rozwijane uzupełniania kodu nie mogą nic pokazać, ponieważ nie wiedzą, jakiego typu będzie parametr. Analiza kodu nie może szukać ostrzeżeń.
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
Ma to pewien sens. Inne strony wywołujące mogą przekazać cokolwiek dla tego parametru. Ale jeśli moja metoda oczekuje, że parametr będzie typu, powiedzmy, pygame.Surface
chciałbym móc w jakiś sposób wskazać to PyCharm, aby mógł pokazać mi wszystkie Surface
atrybuty w rozwijanym menu uzupełniania kodu i podświetlić ostrzeżenia, jeśli Nazywam niewłaściwą metodę i tak dalej.
Czy istnieje sposób, w jaki mogę dać PyCharm wskazówkę i powiedzieć „psst, ten parametr powinien być typu X”? (A może, w duchu języków dynamicznych, „ten parametr ma kwakać jak X”? Nie przeszkadza mi to.)
EDYCJA: odpowiedź CrazyCodera poniżej załatwia sprawę. Dla każdego nowicjusza takiego jak ja, który chce szybkiego podsumowania, oto jest:
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.
Odpowiednią częścią jest @type peasant: Person
linia dokumentu.
Jeśli również przejdziesz do Plik> Ustawienia> Zintegrowane narzędzia Python i ustawisz „Docstring format” na „Epytext”, wówczas Widok PyCharm> Szybkie wyszukiwanie dokumentacji wypisze informacje o parametrach, zamiast po prostu wydrukować wszystkie @ -lines w stanie, w jakim się znajdują.
@param xx: yyy
staje się:param xx: yyy
. Zobacz jetbrains.com/pycharm/webhelp/…