首页 > 解决方案 > 在具有 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])

但我得到变量未定义的错误。我该如何解决这个问题?

标签: python-dataclasses

解决方案


你有一个范围问题。到执行 lambda 函数时,a它不再可见,因此它不知道如何解决它。另请参阅python 文档中有关延迟 lambda 执行的更简单的示例以了解该问题。

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

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

看起来有点奇怪,但它确实有效。


推荐阅读