问题标签 [python-typing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
387 浏览

python - 狮身人面像文档在导入输入方面苦苦挣扎

今天,我为我的 python 项目设置了一个简单的 sphinx 作业。当我点击“make html”时,它会崩溃并显示以下消息:

警告:autodoc:导入模块“myname.mymodule”失败;引发了以下异常:无法导入名称“MyClass”

我逐行删除,现在,如果我删除

当然,在 myname.mymodule 之前,sphinx 会执行带有错误的文档(找不到元组)。

我可以很容易地附上 sphinx 引用的日志,但其中唯一有趣的是:

而不是 self.fetch_token().match([OP, '='], NEWLINE, COMMENT): AttributeError: 'NoneType' object has no attribute 'match'

斯芬克斯打字有问题吗?或者我的进口有什么问题吗?

0 投票
1 回答
1285 浏览

python - 参数的 Python 类型可以是 None

我正在尝试使用 python 类型注释创建树结构。代码是这样的:

但是代码存在类型不匹配的问题,Pycharm 会引发Expected type 'TNode', got 'None' instead. 有没有办法解决这个问题,或者是否有更好的方法来设计类构造函数?

0 投票
8 回答
7916 浏览

python - 如何正确地将类型提示添加到 Mixin 类?

考虑以下示例。该示例是人为设计的,但在一个可运行的示例中说明了这一点:

执行时将给出以下输出:

该代码有效。

但是mypy在上面运行,会产生以下错误:

我明白为什么 mypy 会给出这个结果。但是 mixin 类从不单独使用。它们总是用作附加的超类。

对于上下文,这是一种已在现有应用程序中使用的模式,我正在添加类型提示。在这种情况下,错误是误报。我正在考虑使用 mixins 重写该部分,因为我不是特别喜欢它,并且可能通过重新组织类层次结构来完成相同的操作。

但我仍然想知道如何正确暗示这样的事情。

0 投票
1 回答
10315 浏览

python - 解压元组时输入提示?

解压元组时是否可以使用类型提示?我想这样做,但它会导致SyntaxError

0 投票
1 回答
260 浏览

python - 子类化时允许嵌套返回类型的协方差

假设我们有以下示例(我花了一段时间才想到我的问题的一个最小示例,如果现实生活环境不是最好的,我很抱歉,但我认为我会比只使用和之类的名称Base更好Child

我已经为我的find_by_name方法定义了返回类型,所以当我编码时,我可以知道返回类型是什么,并据此进行操作。

现在想象一下,我创建了我的 Product 和 Store 的子类(在这里它相当无用,但它确实很有必要,当然)。

正如注释掉的那样,PyCharm(和任何注释检查)将检测到此函数的返回类型与基于内容来自的函数的返回类型给出的内容不匹配。

出于可读性和更容易调试的目的,我尝试替换注释但没有运气:

甚至替换整个函数都不够:

我必须替换init中的变量定义:

反过来,这意味着替换整个类,并使继承无用。 如何替换注释和返回类型而不必替换整个代码?

编辑:包括评论框中引入的术语(我不知道),我想我的问题会改写为:当使用具有较窄返回类型的子方法中的父类的广泛类型的方法时,如何允许逆变?

第二个想法,我认为将默认的广泛类型从父函数更改为标准的较窄类型比允许更广泛的返回类型更好。

丑图:

0 投票
1 回答
1409 浏览

python - 如何在 Python 3 中将参数传递给自定义静态类型提示?

我是 Python 3 中静态类型提示的忠实拥护者和拥护者。我已经使用它们一段时间了,没有任何问题。

我刚刚遇到了一个似乎无法编译的新边缘案例。如果我想定义一个自定义类型,然后定义它的参数怎么办?

例如,这在 Python 3 中很常见:

但这不会编译:

我意识到SpecialContainer在这种情况下这在技术上是一个函数,但它不应该在类型签名的上下文中被评估为一个函数。第二个代码段以TypeError: 'function' object is not subscriptable.

0 投票
1 回答
1564 浏览

python - 在 Python 3.7 中使用工厂函数生成注释类型时出现“typing.ClassVar”的问题

我正在尝试使用工厂函数来生成一些类型注释——特别是针对tuple类型。我有一个运行良好的工厂版本(例如,它在 MyPy 中令人满意地编译、运行和签出):

… 用法如下:

…但是,当我尝试添加对typing.ClassVar注释的支持时,我没有成功,看起来像这样:

...在此更改之后,代码甚至最初都不会编译 - 它无法通过模块TypeError深处的a 来编译:typing

TypeError: typing.ClassVar[typing.Tuple[~HomogenousTypeVar, ...]] 作为类型参数无效

......随着错误的发生,我觉得有点像打电话;我的意思是,不是所有东西都应该typing以某种方式是有效的类型参数吗?

在与 相关typing源代码ClassVar中,文档字符串中提到了一些对其使用的限制——但这不是其中之一。我有什么明显的遗漏吗?我以这种方式使用此注释的尝试是不切实际的吗?我还能尝试什么?

0 投票
0 回答
34 浏览

python - 如何使用尚未声明的类的类型注释函数?

在下面的代码中,我有两个类包含应该返回另一个实例的方法,并且没有注释可以按预期工作:

但是,在代码中添加类型注释会导致NameError任何注释都Foo指示Bar为类型,因为Bar尚未声明:

在这种情况下,简单地切换顺序也无济于事,因为Bar还需要Foo在其注释中引用。

如何使用尚未声明的类注释函数?


在其他语言中,这将通过前向声明来处理,但是我不知道 python 中有这样的功能。我尝试了“明显”的方法来模拟前向声明(声明一个空类),虽然它表面上看起来有效,但实际上检查注释表明这种方法存在缺陷:

另一种可能性是Foo使用 的基类进行注释Bar,但这开始变得相当混乱:

如何使用尚未声明的类注释函数?

0 投票
1 回答
2729 浏览

python - 如何对返回类型取决于参数的输入类型的函数进行类型提示?

假设我有一个函数可以将 Python 数据类型转换为 Postgres 数据类型,如下所示:

我可以输入提示为:

但是,即使它是正确的,下面的代码也会无法进行类型检查:

完整示例(工作代码,但类型提示错误):

我知道我可以将映射拆分为两个函数,但目的是拥有一个通用类型映射函数。

我也在考虑使用类和多态性,但是我将如何对最顶层的类方法进行类型提示呢?因为它们的输出类型将取决于具体的实例类型。

0 投票
5 回答
40180 浏览

python - 枚举属性的类型注释

我有这段代码:

some_color如果我想我会从 Color 枚举中接收一个枚举属性(例如:),我该如何正确地向这个函数中的变量添加类型注释Color.RED