在Python3中,我可以创建参数和返回类型注释。例子:
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
问题是我无法使用当前类(Graph)的返回类型创建注释,该类尚未定义。例子:
class Graph:
def reverse(self) -> Graph:
pass
这段代码有错误
def reverse(self) -> Graph:
NameError: name 'Graph' is not defined
这些注释对于记录和允许IDE识别参数和返回类型都非常有用=
UPD:所以我想到的是,这要么是不可能的,要么需要一些我不喜欢的技巧,所以我决定只使用def reverse(self)-
所以过了一会儿,我可以说我的决定是使用-
我可以使用的另一个可能的解决方案是在运行时更改注释,但这不能解决文档问题——您不希望在源代码中的某个地方寻找类型声明。
这个问题的根源在于在实际定义类之前识别类对象。这在python中是根本不可能做到的。
在python-3.7中,通过在函数定义时不评估注释,解决了这个问题。相反,它们以字符串形式保存在\uuuu注释中。这称为PEP 563中介绍的注释延迟评估。
另请注意:
弃用政策
从Python3.7开始,使用所描述的功能需要导入
\uuuuuuuuuuuuuuuu
。没有提出任何警告。
在Python 3.8中,当模块中存在类型注释时,编译器会引发一个
导入。PendingDeprecationWarning
__future__
从Python 3.9开始,警告变成了一个DeprecationWarning
。
在Python 4.0中,这将成为默认行为。不再支持使用与此PEP不兼容的批注。
以下是一个例子:
In [7]: from __future__ import annotations
In [8]: class C:
...: def func(cls, arg:str) -> C:
...: pass
...:
In [9]: c = C()
问题内容: 在python 3中,我可以设置参数并返回类型注释。例: 问题是我无法使用当前类(图形)的返回类型进行注释,该类型尚未定义。例: 这段代码有错误 这些注释对于记录文档以及允许IDE识别参数和返回类型都非常有用=>启用自动完成功能 UPD:所以我想到的是这是不可能的,或者需要一些我不喜欢的技巧,所以我决定使用 可以理解的文档,尽管这违反了规则。缺点是它不适用于IDE自动完成功能。 问题答
如果我有以下代码 首先,这甚至是可能的,因为它编译得很好。但是我不能使用中的方法执行操作: makeCan是否不同时返回Can和PromotionalCan?如果是这样,当返回PromotionalCan时,如何对变量进行操作?谢谢 编辑:PromotionalCan继承自Can,第二种方法是在PromotionalCan中
我有一个任务,我们要创造一个石头,纸,剪刀的游戏。它指定我们必须创建一个抽象的“工具”类,其中有三个子类:“ToolRock”、“ToolPaper”、“ToolScissors”。抽象类应该有一个“+getFeagnet():tool”函数(用斜体写成)。 我的假设是做一个像这样的抽象函数: RockTool类被指定为具有函数“+get弱点():tool”(不是用斜体写的),我的想法是创建一个覆
我有一节课
我正试图从使用observable转换下面的observable代码。使用可管道操作符创建到。 我已经尝试了下面的方法,但是我得到了一个转换错误,无法转换可观察的类型。看不见的。如有任何帮助,我们将不胜感激。
现在我学习Java已经有一段时间了,但有一个概念我很难理解。我习惯了这样的方法 我知道上面的方法会返回一个整数或字符串,无论你想要什么数据类型 现在我在问自己,上述方法的回报类型到底是什么。我如何使用返回的东西做其他事情? 我还看到人们将对象作为这样的参数传递给方法 这又是怎么回事?在什么情况下,上述“风格”是必要的,需要避免什么陷阱? 使用对象而不是整数之类的值让我感到困惑。