我想在default_factory的lambda函数中引用一个数据类变量,如:
from typing import List
from dataclasses import dataclass, field
@dataclass
class A:
a: float = 1
b: List = field(default_factory = lambda: [a])
但是如果我得到变量未定义的错误。我怎么解决这个问题?
你有一个范围问题。当lambda函数执行时,a
对它不再可见,所以它不知道如何解析它。请参阅python文档中有关延迟lambda执行的更简单的示例,以了解问题。
您可以通过在创建lambda时将a
绑定到其本地作用域来修复它:
@dataclass
class A:
a: float = 1
b: List = field(default_factory = (lambda a=a: [a]))
看起来有点奇怪,但是效果很好。