问题标签 [type-annotation]

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 回答
582 浏览

python - 用于相同的通用函数签名的 Python 类型注释

typing.Callable接受两个“参数”:参数类型和返回类型。参数类型应该是..., 用于任意参数,或显式类型列表(例如,[str, str, int])。

有没有一种方法可以表示Callables 具有完全相同的(尽管是任意的)泛型签名?

例如,假设我想要一个接受函数并返回具有相同签名的函数的函数,如果我事先知道函数签名,我可以这样做:

但是,我预先不知道参数类型,我希望我的组合器具有适当的通用性。我曾希望这会奏效:

但是,解析器(至少在 Python 3.7 中)不喜欢ArgT放在第一位。Callable[..., RetT]我能做到最好吗?

0 投票
1 回答
60 浏览

python - 带注释的赋值表达式中出现意外的有效语法

显然(至少对我来说令人惊讶),这是 Python 3.6+ 中完全有效的表达式:

这怎么了?我使用模块检查了它ast并得到以下信息:

好的,这是一个带注释的作业。我查阅了语法参考,发现它对应于这条规则:

这对我来说没有多大意义。如果它是一个带注释的赋值,那么为什么表达式的赋值部分是可选的?如果表达式的赋值部分不存在,这可能意味着什么?这真的不奇怪吗?

annasign节点仅在一个规则中引用:

在该级别的其他每个可能的投影中,都需要某种赋值表达式(augassign是一个类似的标记+=)。那么为什么它是可选的annassign呢?

我想这似乎是为了成为裸名称表达式的注释版本(即只是x),但这真的很令人困惑。我对那里的静态类型检查器不太熟悉,但他们可以使用这样的注释吗?

这很可能是故意的,但这似乎是一个错误。这有点问题,因为可以编写语法上有效但完全无意义的代码,如下所示:

最近,当我将表示形式转换为单独的变量时,我在自己的代码中犯了类似的错误dict,只有当我的测试管道在 Python 3.5 环境中运行并生成SyntaxError.

无论如何,我主要只是对意图感到好奇,但也很高兴发现我发现了一个实际的语法错误。

0 投票
0 回答
126 浏览

python - Python 3.7 在类型注释上抛出 NameError 但我不想导入定义它的模块

我有以下结构

在 _base.py

现在在 code.py

Python 抛出一个NameErrorBase但我不想导入它。我没有真正的理由。特别是如果foo()甚至没有做任何事情,arg而是将其进一步发送到另一个模块。加载周期导入 ( ) 涵盖了类型检查器if TYPE_CHECKING:

为什么 python 会评估类型注释呢?我不明白为什么它必须告诉它是什么Base。为什么即使完全是胡说八道,它也不完全按照我写的那样将其存储为字符串?保证它是有效表达式而不仅仅是任意表达式的注释的用途是什么

0 投票
1 回答
414 浏览

python - 继承类型和成员重载的 Python 类型注释问题

请参阅下面的示例,使用 python 3.7,我找不到正确注释的方法。注释错误显示在注释中,由 mypy 给出。

  • 我有一个实现“通用成员”的“通用类”。以及继承该结构的具体类和成员。
  • 具体成员可以有其他方法并为构造函数使用不同的参数。

正确注释的方法是什么?

非常感谢。

0 投票
0 回答
391 浏览

python - 如何在python中键入注释递归数据结构?

我想创建一个简单的嵌套字典,最终是 str-to-str 映射。作为字典,示例实例可能如下所示:

描述性较差的类型注释可能看起来像Dict[str, Any],但我想强制执行一些比Any我在这棵树中搜索更具体的东西。

0 投票
1 回答
77 浏览

python - python - 如何在Python 3中键入迭代类实例或相同类实例的元组的注释函数?

我开始在 Python 3 中使用类型注释进行实验,并且遇到了函数问题exclude_filter,特别是items在下面的代码片段中进行了注释(我发布了这个未注释的)。简而言之,我正在尝试遍历列表并根据某些标准过滤掉一些项目。并且列表中项目的类型是类的实例或这些实例的元组,在这种情况下,我只在元组的第一个成员中寻找标准。

我已经尝试过明显错误items: List[BaseItem]的结果:

所以我试过item: List[Union[BaseItem, Tuple[BaseItem, BaseItem]]]

然后我试过了T = TypeVar("T", BaseItem, Tuple[BaseItem, BaseItem]),但我得到了:items: List[T]item: T

好吧,我尝试了更晦涩的组合,但似乎没有任何效果。注释此代码的正确方法是什么?

0 投票
2 回答
220 浏览

python - 增加 Python 新整数类型的惯用方法是什么?

假设我这样定义了一个新类型:

然后假设我有一个Index这样的变量:

什么是惯用的增量方式index

如果我做

这相当于

那么从静态类型检查的角度来看,类型index变为int而不是:Index

有什么比

保持Index类型?

0 投票
0 回答
255 浏览

python - What's the correct type hint for a type hint?

I have a use case for accepting type hints as arguments to a function. But what is the right type hint to to accept a type hint?

#xA;

Is there a "TypeHintType" that I can use to annotate that a type hint is expected as an argument?

0 投票
1 回答
986 浏览

python - TypeVar('T') 和 Any 之间的区别

假设我有一些通用功能:

如果我想输入提示*args,根据PEP ,我只需要指定类型一 arg。

如果参数可以是任何类型怎么办?有什么区别:

据我所知,TypeVar('T')等同于“任何类型”,但是当变量 args 具有多种类型时,这是否适用?

0 投票
1 回答
113 浏览

python - 具有相同类型属性的类的类型注释?

我有 Node 类,Node 类有 2 个孩子,孩子 A 和 B,但它们是具有相同结构的同一个类,因为孩子可以有自己的孩子。

代码在python中,语言不让我做下一个,标记我一个错误:

有没有办法做到这一点,对象本身嵌套?

致以我的问候