在具有 default_factory 的字段中引用数据类的变量

Reference a variable of a dataclass in a field with a default_factory

我想在 lambda 函数中为 default_factory 引用数据类变量,例如:

from typing import List
from dataclasses import dataclass, field

@dataclass
class A:
    a: float = 1
    b: List = field(default_factory = lambda: [a])

但是我收到变量未定义的错误。我该如何解决?

您遇到了范围界定问题。在执行 lambda 函数时,a 对它不再可见,因此它不知道如何解析它。另请参阅关于延迟 lambda 执行的更简单的 examples in the python docs 以了解问题。

您可以通过在创建期间将 a 绑定到 lambda 的本地范围来修复它:

@dataclass
class A:
    a: float = 1
    b: List = field(default_factory = (lambda a=a: [a]))

看起来有点奇怪,但确实可以。