【问题标题】:How to type hint so pycharm can auto-complete a local variable?如何键入提示以便 pycharm 可以自动完成局部变量?
【发布时间】:2012-06-16 06:09:17
【问题描述】:

我如何告诉 pycharm form.save() 的返回类型,在这种情况下,是一个 CategoryQuestion 对象?

def category_ask(request):
    if request.method == 'POST':
        form = CategoryQuestion_form(request.POST)
        if form.is_valid():
            question = form.save(commit=False)
            question.who = request.user
            question.dat<tab>

【问题讨论】:

    标签: django pycharm


    【解决方案1】:

    使用“assert isinstance(x, Type)”来伪造 pycharm 以了解局部变量的正确类型。然后 Pycharm 知道正确的类型,并且 tab 补全将起作用:

    def category_ask(request):
        if request.method == 'POST':
            form = CategoryQuestion_form(request.POST)
            if form.is_valid():
                question                = form.save(commit=False)
                assert isinstance(question, models.CategoryQuestion)
                question.who            = request.user
                question.date_created<tab>
    

    从 pycharm 1.2 开始,不幸的是,您不能只使用未经检查的裸露的“isinstance()”,断言是必需的。

    【讨论】:

      【解决方案2】:

      PyCharm 3(不确定早期版本)支持通过 :type@type 文档字符串对局部变量(以及参数)进行类型提示。

       def category_ask(request):
          if request.method == 'POST':
              form = CategoryQuestion_form(request.POST)
              if form.is_valid():
                  # :type models.CategoryQuestion
                  question = form.save(commit=False)
                  question.who = request.user
                  question.dat<tab>
      

      查看官方文档:http://www.jetbrains.com/pycharm/webhelp/type-hinting-in-pycharm.html#d68026e604

      【讨论】:

      • Pycharm 3.4 对我不起作用。它适用于文档中的整数类型,但不适用于模型。
      【解决方案3】:

      在 Pycharm 3 中,局部变量的 @type 提示很挑剔,但很有效。它必须出现在赋值之后的行上,并且似乎需要三引号语法:

              if form.is_valid():
                  question = form.save()
                  """@type : CategoryQuestion"""
                  question.dat<tab>
      

      查看官方文档:http://www.jetbrains.com/pycharm/webhelp/type-hinting-in-pycharm.html#d68026e604

      【讨论】:

        【解决方案4】:

        对于使用 python3.6 及更高版本的用户:
        类型提示现在是 python 的一部分,并且可以很好地与 pycharm 配合使用。
        您可以在变量名称后添加: 以提示其类型,例如some_varibale: str。同样的规则也适用于参数。
        因此,在这种情况下,变量被暗示为CategoryQuestion

        question: CategoryQuestion = form.save(commit=False)
        

        要知道如何键入提示查询集,例如filter,请参阅here
        你也可以使用django_hint,它有专门针对 Django 的类型提示类。

        【讨论】:

          猜你喜欢
          • 2017-10-21
          • 2017-09-27
          • 1970-01-01
          • 2016-03-21
          • 1970-01-01
          • 2020-03-17
          • 1970-01-01
          • 2015-01-15
          • 2013-02-12
          相关资源
          最近更新 更多