2016-11-11 2 views
0

Я использую PyCharm в качестве редактора. Например, у меня есть следующая функция:Python. Подсказка для переменной

def get_instance(): 
    # method without doc sctring in some module 
    # returns instance of MyClass 
    return some_var 

И у меня есть второй файл, который вызывает get_instance():

var = get_instance() 

Как я могу определить тип данных для значения? Я хочу использовать автозаполнение переменной.

Например, в php это будет выглядеть следующим образом:

/** @var MyClass $var */ 
$var = getInstance(); 

После этого я буду видеть все методы и свойства $var. Как объявить docstring для переменной python? Я знаю о :type и :rtype, но если мне нужен тип объявления для определенной переменной? Могу ли я объявить несколько типов? Что я должен делать?

Примечание: Я не могу вносить изменения с get_instance().

+0

вы смотрели на [Советы] (https://docs.python.org/3/library/typing.html)? – Olian04

+0

Не могли бы вы уточнить, где именно вам нужно или хотите использовать докстры? –

+0

@Rightleg в любом месте кода. Пример: 'get_docker()' return 'Docker' (я знаю это). Но функция без docstring и я не могу ее изменить. Поэтому я называю «var = get_docker()». И я хочу определить тип «var» (это экземпляр Docker). –

ответ

0

Вы можете сделать это так же, как свойства описания класса. Вот пример:

from example_module import MyClass 

var = get_instance() 
""" 
:type var: MyClass 
""" 

Также вы можете использовать описание без импорта, как это:

var = get_instance() 
""" 
:type var: example_module.MyClass 
""" 

второй способ использует PEP 484:

test = my() # type: dict 

Примеры автозаполнения в PyCharm:

enter image description here

enter image description here

enter image description here

2

Я не думаю, что вы можете сделать это через docstring, но есть механизм, называемый annotation. Вы можете добавить любое выражение, которое вы хотите использовать, после двоеточия : и самому объявлению функции, используя стрелку ->. Например:

def getInstance(param: str) -> MyClass 
    return some_var 

Я добавил здесь параметр ввода для целей иллюстрации. В этом случае str и MyClass являются объектами, представляющими ожидаемые типы ввода и возврата соответственно. Они никогда не используются в вашем коде напрямую, просто спрятаны в атрибуте func_annotations для конечных пользователей, которые заботятся о таких вещах (например, редакторы).

+0

Спасибо за ответ. Но как я знаю, что это работает только с python 3. Это правда? Аналогичным образом - использование ': type' в docsting для каждого параметра. Но иногда удобно указывать экземпляр переменной (особенно если вы не можете изменить docstring функции, которая была вызовом). –

Смежные вопросы