2013-11-19 2 views
5

у меня есть следующий код:Тип класса намекая еще не импортирован

def render(self, notification): 
    """ 
    @type notification: Notification 
    """ 
    return NotificationRepresentation(notification).to_dict() 
    # some irrelevant code 

notification является экземпляр по Notification класса. Notification класс здесь не импортируется, и PyCharm не может использовать этот тип hinting (inferred type: unknown).

Я пробовал использовать полное имя класса, это не сработало. Очевидным способом является импорт класса, но он никогда не использовался, поэтому он будет избыточным импортом (и PyCharm удалит его при оптимизации импорта до фиксации). Менее очевидный способ сделать некоторые странные вещи, как Celery.task сделать:

STATICA_HACK = True 
globals()['kcah_acitats'[::-1].upper()] = False 
if STATICA_HACK: 
    # This is never executed, but tricks static analyzers (PyDev, PyCharm, 
    # pylint, etc.) into knowing the types of these symbols, and what 
    # they contain. 
    from celery.canvas import group, chord, subtask 
    from .base import BaseTask, Task, PeriodicTask, task, periodic_task 
    from .sets import TaskSet 

Есть ли чистый способ сделать это?

+0

Ссылка на код STATICA_HACK: http://docs.celeryproject.org/en/3.0/_modules/celery/task.html –

+0

@Mr_and_Mrs_D спасибо за ссылку - добавил к этому вопросу. Кроме того, вы могли бы добавить его сами. – J0HN

ответ

1

Укажите полный путь к классу, к которому вы хотите обратиться.

def render(self, notification, my_subtask): 
    """ 
    @type notification: full.path.to.Notification 
    @type my_subtask: celery.canvas.subtask 
    """ 
    return NotificationRepresentation(notification).to_dict() 
    # some irrelevant code 

Возможно, это проблема с вашей старой установкой, поскольку предоставление полного пути для меня в PyCharm 3.0. Попробуйте обновить;)

+0

Можете ли вы привести пример полного пути? Как насчет того, чтобы пытаться ввести hint класс, принадлежащий не импортированной библиотеке - скажем, wx? –

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