Как заставить PyCharm автоматически завершать код в методах? - PullRequest
19 голосов
/ 15 марта 2011

Когда я использую стороннюю л В такой библиотеке, как boto , PyCharm, кажется, может выполнять автоматическое заполнение довольно хорошо

enter image description here

Однако, как только я определяю собственную функцию, автозаполнение прерывается внутри этой функции. Я понимаю, почему, так как я не могу дать функции какую-либо информацию о типах ее аргументов, я не могу догадаться, как ее автоматически завершить. Есть ли способ обойти эту проблему?

Редактировать

Я попытался использовать строку документации (для Python 2), но автозаполнение по-прежнему отсутствует

def delete_oldest_backups(conn, backups_to_keep, backup_description):
    """
    delete_oldest_backups(EC2Connection, int, string)
    """

(также пробовал boto.ec2.connection.EC2Connection вместо просто EC2Connection)

Ответы [ 4 ]

14 голосов
/ 23 июля 2013

Вы можете использовать подсказки типа: http://www.jetbrains.com/pycharm/webhelp/type-hinting-in-pycharm.html

 def some_method(self, conn):
   """
   @type conn: EC2Connection
   """
   conn.<autocomplete>
5 голосов
/ 15 марта 2011

Вы можете указать тип информации о параметрах функции, используя параметр Python 3 и аннотации возвращаемого значения. Если вы используете Python 2, вы также можете указать информацию в строке документации функции. PyCharm понимает формат, используемый строками документации двоичных модулей в стандартной библиотеке, например:

"""
foo(int, string) -> list

Returns the list of something
"""
1 голос
/ 14 марта 2014

Вы можете установить библиотеку через pyCharm "менеджер пакетов".

Перейдите в Настройки -> Интерпретатор проекта -> Интерпретаторы Python

Package list

И в списке «Пакеты» нажмите «Установить» и найдите библиотеку, которую хотите установить

Install package

После установки автозаполнение будет доступно в редакторе.

Autocomple inside function

Надеюсь, это то, что вы ищете.

1 голос
/ 10 февраля 2012

Чтобы PyCharm мог распознать экземпляр объекта и извлечь все его методы, мы должны использовать следующие операторы.Но я думаю, что оба это ужасный способ тратить время на программирование и время выполнения.

assert isinstance(instanceX, ClassOfInstanceX)  
instanceX.{#list of method/properties appears}

В качестве альтернативы, вы также можете использовать имя класса, которое будет вызывать метод или свойство каждый раз, когда вы захотите вызвать его и передатьэкземпляр параметра self.Но это слишком многословно, на мой взгляд, особенно для вложенного класса

ClassOfInstanceX.{#list of method/properties appears}
     # then you will have...
ClassOfInstance.method(instanceX, args...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...