【问题标题】:Is there a way to explicitly tell PyCharm what class an attribute is an instance of?有没有办法明确告诉 PyCharm 属性是哪个类的实例?
【发布时间】:2012-02-20 20:39:42
【问题描述】:

我最近使用了 PyCharm,我已经习惯了 Wing 的一个功能,您可以在其中告诉 IDE 特定标识符(变量、属性等)将是什么类。例如:

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

此时,Wing 确切地知道 my_object.my_attribute 是什么即使它无法从源代码分析中找出答案。

我正在寻找 PyCharm 中的类似功能。我知道一个对象的特定属性是什么,但 PyCharm 不知道,所以我怎么知道它,所以它可以给我方便的补全?

相关问题:我也看到了类似的问题,How can I tell PyCharm what type a parameter is expected to be?,但它不涉及属性,仅涉及参数。

【问题讨论】:

    标签: pycharm


    【解决方案1】:

    实际上 PyCharm 也理解 'assert isinstance' 语法,但仅适用于非限定引用。我也提交了一个问题来支持这个合格的参考:

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

    在当前版本中,您可以通过转到 SomeClass 的声明并为属性添加 epydoc 或 sphinx 文档字符串来指定 my_attribute 的类型。

    【讨论】:

      【解决方案2】:

      如果我正确理解您的问题,您正在寻找的是来自 PyCharm 的一般类型推断。来自静态类型语言,当我使用代码完成时,我感到很困惑,而且选择与 python 库的内容一样多。

      我发现在 PyCharm 中,它可以选择在运行时收集类型信息,并在开发期间提供(即代码完成)。

      这是你的做法......

      首选项 > Python 调试器 > “收集运行时类型以获取代码洞察力”

      当你“调试”你的代码时(不是你不必使用断点)。 PyCharm 将开始为所有代码导航/完成提供更好的建议。

      干杯

      【讨论】:

        【解决方案3】:

        这对我有用 (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"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-31
          • 1970-01-01
          • 2011-07-08
          • 2020-04-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多