我正在研究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))
用于打印(使用CPython):
Test(x=20, y=10)
但随着发行版的发布,它仍然可以打印(再次使用CPython):
Test(y=10)
因此,它从表示形式中排除了类变量x。谁能告诉我此更改是否是有意的,在哪里可以找到有理由的讨论?
有了这一更改,Transcrypt的行为就与CPython有所不同,我不希望这样做。所以我想知道我应该改用Transcrypt还是应该将其视为CPython回归并等待其解决。
从文档中:
30.6.3。类变量
dataclass()
实际检查字段类型的两个地方之一是确定字段是否为PEP 526中定义的类变量。它通过检查字段的类型是否为来做到这一点typing.ClassVar
。如果字段是ClassVar
,则将其从字段中排除,并被数据类机制忽略。此类ClassVar
伪字段不会由模块级fields()
函数返回。
因此,这似乎是有意更改。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句