是否可以在 __post_init__() 或更高版本中冻结数据类对象?

Is it possible to freeze a dataclass object in __post_init__() or later?

我想知道是否可以在 post_init() 中或什至在定义对象之后“冻结”数据类对象。

所以代替:

@dataclass(frozen=True)
class ClassName:
    var1: type = value

有这样的东西:

@dataclass
class ClassName:
     var1: type = None
def __post_init__(self):
     self.var1 = value
     FREEZE()

或者甚至是这样的:

a = ClassName()
FREEZE(a)

可能与否,为什么?

不,不是。但是“冻结”可以被简单地颠覆,只需使用:

@dataclass(frozen=True)
class ClassName:
     var1: type = value
def __post_init__(self):
    object.__setattr__(self, 'var1', value)