TypeError: cannot inherit frozen dataclass from a non-frozen one怎么解决
时间: 2024-11-30 19:21:57 浏览: 20
TypeError: cannot inherit frozen dataclass from a non-frozen one 这种错误通常发生在尝试创建一个数据类(data class)的子类,但是父类是冷冻的(frozen),而子类试图添加新的属性或方法时。数据类一旦实例化就会变为不可变的(frozen状态),不允许动态修改。
要解决这个问题,你可以按照以下步骤操作:
1. **确保父类是可变的**:如果父类确实不需要是冻结的,可以将其标记为 `dataclasses.init_var` 或者去掉 `frozen=True` 标签,使其默认可变。
```python
from dataclasses import dataclass
# 父类
@dataclass
class NonFrozenParent:
some_field: int
```
2. **修改子类设计**:如果你需要一个可添加新属性的子类,那么考虑将那些需要变动的部分单独封装成独立的可变类,然后作为子类的一个属性。
```python
from dataclasses import dataclass
# 子类
@dataclass(frozen=False) # 子类是可变的
class Child(NonFrozenParent):
extra_field: str = 'default_value'
```
3. **避免在实例化后修改**:如果你确实需要在创建后添加属性,可以在初始化时处理,但这时你需要明确知道这违反了冷冻数据类的原则。
```python
child = Child(some_field=1)
child.some_other_attribute = 'new value' # 尽量避免这样做
```
阅读全文