在具有 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]))
看起来有点奇怪,但确实可以。
我想在 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]))
看起来有点奇怪,但确实可以。