我正在开发Transcrypt Python to JavaScript 编译器的3.7.1 版。发布过程的一部分是出货测试,其中 Transcrypt 与 CPython 背靠背测试。
它曾经在 CPython 3.7 的 beta 版中完美运行,但在发布时出现了问题。
该程序:
from dataclasses import dataclass
from typing import ClassVar
@dataclass
class Test:
x: ClassVar = 10
y: int = 10
t = Test ()
t.x = 20
print (repr (t))
Run Code Online (Sandbox Code Playgroud)
用于打印(使用 CPython):
Test(x=20, y=10)
Run Code Online (Sandbox Code Playgroud)
但是随着它打印的发布(再次仅使用 CPython):
Test(y=10)
Run Code Online (Sandbox Code Playgroud)
所以它从表示中遗漏了类变量 x。谁能告诉我这个改变是否是故意的,我在哪里可以找到证明它合理的讨论?
有了这个变化,Transcrypt 的行为与 CPython 不同,这是我不想要的。所以我想知道我应该采用 Transcrypt 还是应该将其视为 CPython 回归并等待它被解决。
从文档:
30.6.3. 类变量
dataclass()实际检查字段类型的两个地方之一是确定字段是否是PEP 526 中定义的类变量。它通过检查字段的类型是否为typing.ClassVar. 如果字段是 aClassVar,则将其作为字段排除在外,并被数据类机制忽略。ClassVar模块级fields()函数不返回此类伪字段 。
所以,这似乎是一个有意的改变。
| 归档时间: |
|
| 查看次数: |
550 次 |
| 最近记录: |