【问题标题】:How to tell Sublime this function return will return that class in Python?如何告诉 Sublime 这个函数返回将在 Python 中返回那个类?
【发布时间】:2019-01-22 23:31:13
【问题描述】:

我有一些这样的代码:

@zhihu.log_attr
@zhihu.iter_factory('voters')
def voters(x):
    from .People import People
    return People(x)

但是 IDE ... Imgur Image

所以我尝试这种方式:

@zhihu.log_attr
@zhihu.iter_factory('voters')
def voters(x)->People:
    from .People import People
    return People(x)

但它不起作用。

NameError: name 'People' is not defined

【问题讨论】:

  • 顺便说一句,Sublime 不是 IDE;它是一个文本编辑器。它使用外部 Python 解释器来运行您的程序,因此如果您在代码中看到错误,那么 Sublime 不太可能与它有任何关系(除非在运行您的程序之前需要采取特殊步骤,例如激活虚拟环境或其他东西) .

标签: python python-3.x sublimetext3


【解决方案1】:

如果在定义函数时未定义返回类型,则可以将返回类型指定为字符串:

@zhihu.log_attr
@zhihu.iter_factory('voters')
def voters(x) -> 'People':
    from .People import People
    return People(x)

PyCharm 足够聪明,可以使用上面的方法来查找对象属性,希望 Sublime 也是。

编辑:这里有更详细的答案:Name not defined in type annotation

【讨论】:

  • 感谢您的帮助。然而,这个'People' 类是这个类的一个子类并且被定义在另一个文件中。我已经尝试过你的方法,但它不起作用。什么都没发生
  • 可能是 Sublime 无法识别类型提示。您是否尝试过其他 IDE,例如 PyCharm?
  • 您可能还希望避免将模块和类命名为完全相同,因为它会造成混淆和非常规。通常,模块名称是小写的,例如from people import People.
  • 感谢您的耐心等待。
  • 不用担心。耐心是我最喜欢的新词。
猜你喜欢
  • 2020-10-04
  • 2023-03-19
  • 2013-11-25
  • 1970-01-01
  • 2017-09-06
  • 2014-07-14
  • 1970-01-01
  • 1970-01-01
  • 2021-05-12
相关资源
最近更新 更多