数据类行为的变化

雅克·德·豪格

我正在研究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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章