Що стосується конструкторів, призначення та викликів методів, то IDE PyCharm досить добре аналізує мій вихідний код та з'ясовує, яким типом має бути кожна змінна. Мені подобається, коли це правильно, тому що він дає мені гарну інформацію про доповнення коду та параметрів, і дає мені попередження, якщо я намагаюся отримати доступ до атрибута, який не існує.
Але коли мова йде про параметри, то вона нічого не знає. У спадному списку заповнення коду нічого не може бути показано, оскільки вони не знають, яким буде тип параметра. Аналіз коду не може шукати попереджень.
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"? Я б з цим добре.)
EDIT: Відповідь 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 і встановіть для "Формат докстрингу" значення "Епітекст", тоді перегляд PyCharm> Швидкий пошук документації дозволить надрукувати інформацію про параметри замість того, щоб просто надрукувати всі @ -lines як є.
@param xx: yyy
стає:param xx: yyy
. Дивіться jetbrains.com/pycharm/webhelp/…