Есть ли способ явно указать PyCharm, к какому классу относится экземпляр атрибута? - PullRequest
5 голосов
/ 28 января 2012

Я недавно поднял PyCharm, и я привык к функции из Wing, где вы можете сказать IDE, каким классом будет конкретный идентификатор (переменная, атрибут, что угодно). Например:

my_object = SomeClass()
assert isinstance(my_object.my_attribute, SomeOtherClass)

На данный момент Wing точно знает, что такое my_object.my_attribute , даже если иначе не сможет понять это из анализа исходного кода.

Я ищу похожую функцию в PyCharm. Я знаю, что является определенным атрибутом объекта, но PyCharm не знает, так как я могу сказать это, чтобы он мог дать мне удобные дополнения?

Смежный вопрос: Я также вижу похожий вопрос, Как я могу сказать PyCharm, какого типа должен быть параметр? , но он не охватывает атрибуты , просто параметры.

Ответы [ 3 ]

7 голосов
/ 31 января 2012

На самом деле PyCharm также понимает синтаксис assert isinstance, но только для неквалифицированных ссылок. Я подал вопрос, чтобы поддержать это и для квалифицированных ссылок:

http://youtrack.jetbrains.net/issue/PY-5614

В текущей версии вы можете указать тип my_attribute, перейдя к объявлению SomeClass и добавив строку документации epydoc или sphinx для атрибута.

5 голосов
/ 24 июля 2013

Если я правильно понимаю ваш вопрос, то вы ищете общий вывод типа из PyCharm.Исходя из статически типизированного языка, я был озадачен, когда использовал завершение кода, и выбор был примерно таким же, как и содержимое библиотеки python.информацию во время выполнения и сделать ее доступной во время разработки (т.е. завершение кода).

Вот как вы это делаете ...

Предпочтения> Отладчик Python> "Сбор типов времени выполнения для понимания кода"

Когда вы" отлаживаете "свой код (вам не нужно использовать точку останова).PyCharm начнет предоставлять лучшие предложения для всего кода навигации / завершения.

Приветствия

Picture of Debug Preferences

2 голосов
/ 04 октября 2012

Это работает для меня (2.6.2)

class Rule (object):
    def __init__(self, *args):
        self.criteria = []
        """@type : list of Criterion"""
        crit = self.criteria[0]
        #on this line, code completion works for "crit"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...