当前位置: 首页 > 面试题库 >

将当前类作为返回类型注释

柯琛
2023-03-14
问题内容

在python 3中,我可以设置参数并返回类型注释。例:

class Graph:
    def __init__(self, V: int, E: int, edges: list):
        pass

    @classmethod
    def fromfile(cls, readobj: type(sys.stdin)):
        pass

    def V(self) -> int:
        pass

    def E(self) -> int:
        pass

问题是我无法使用当前类(图形)的返回类型进行注释,该类型尚未定义。例:

class Graph:
   def reverse(self) -> Graph:
       pass

这段代码有错误

def reverse(self) -> Graph:
NameError: name 'Graph' is not defined

这些注释对于记录文档以及允许IDE识别参数和返回类型都非常有用=>启用自动完成功能

UPD:所以我想到的是这是不可能的,或者需要一些我不喜欢的技巧,所以我决定使用def reverse (self) -> 'Graph':
可以理解的文档,尽管这违反了规则。缺点是它不适用于IDE自动完成功能。


问题答案:

所以现在过了一会儿,我可以说我做出的决定是使用-> 'Graph'而不是-> Graph。它不能使我的IDE(PyCharm)能够以这种方式识别类型,但对于文档目的它已经足够好了。

我可以使用的另一种可能的解决方案是在运行时更改批注,但这不能解决文档问题-您将不想在源中间寻找类型声明

问题的根源在于在实际定义类之前识别类对象。这在python中根本不可能做到。



 类似资料:
  • 在Python3中,我可以创建参数和返回类型注释。例子: 问题是我无法使用当前类(Graph)的返回类型创建注释,该类尚未定义。例子: 这段代码有错误 这些注释对于记录和允许IDE识别参数和返回类型都非常有用= UPD:所以我想到的是,这要么是不可能的,要么需要一些我不喜欢的技巧,所以我决定只使用

  • 我有一个任务,我们要创造一个石头,纸,剪刀的游戏。它指定我们必须创建一个抽象的“工具”类,其中有三个子类:“ToolRock”、“ToolPaper”、“ToolScissors”。抽象类应该有一个“+getFeagnet():tool”函数(用斜体写成)。 我的假设是做一个像这样的抽象函数: RockTool类被指定为具有函数“+get弱点():tool”(不是用斜体写的),我的想法是创建一个覆

  • 在python 3.x中,通常使用函数的返回类型注释,例如: “void”类型的正确注释是什么? 我正在考虑三种选择:

  • 我正试图从使用observable转换下面的observable代码。使用可管道操作符创建到。 我已经尝试了下面的方法,但是我得到了一个转换错误,无法转换可观察的类型。看不见的。如有任何帮助,我们将不胜感激。

  • 现在我学习Java已经有一段时间了,但有一个概念我很难理解。我习惯了这样的方法 我知道上面的方法会返回一个整数或字符串,无论你想要什么数据类型 现在我在问自己,上述方法的回报类型到底是什么。我如何使用返回的东西做其他事情? 我还看到人们将对象作为这样的参数传递给方法 这又是怎么回事?在什么情况下,上述“风格”是必要的,需要避免什么陷阱? 使用对象而不是整数之类的值让我感到困惑。

  • 我正在讨论设计我们的API(Stream vs Collection作为返回类型)的最佳方式。这篇文章中的讨论非常有价值。 @BrainGotez的答案提到了一个条件,即集合优于流。我不太明白这意味着什么,谁能帮我举个解释的例子? 当有很强的一致性要求时,您必须生成移动目标的一致快照 我的问题是,具体而言,“强一致性要求”和“移动目标的一致快照”在现实应用中意味着什么?