数据类行为的变化

时间:2018-08-30 14:04:47

标签: python transcrypt

我正在研究Transcrypt Python到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回归并等待其解决。

1 个答案:

答案 0 :(得分:4)

来自the documentation

  

30.6.3。类变量

     

dataclass()实际上检查两个类型的两个位置之一   field用于确定字段是否为PEP 526中定义的类变量。它通过检查字段的类型是否为typing.ClassVar来完成此操作。如果字段是ClassVar,则将其排除在外   考虑作为一个字段,并被数据类机制忽略。   模块级别不返回此类ClassVar伪字段   fields()功能。

因此,这似乎是有意更改。