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



我想在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]))

看起来有点奇怪,但是效果很好。

最新更新