dataclass
не имеет встроенной поддержки для этого. Замороженность отслеживается на уровне класса, а не для каждого экземпляра, и не поддерживается автоматическая генерация замороженных или незамерзающих эквивалентов классов данных.
Хотя вы можете попытаться что-то сделать для создания новых классов данных на лету, они очень плохо взаимодействуют с isinstance
, ==
и другими вещами, с которыми вы хотели бы работать. Вероятно, безопаснее просто написать два класса данных и методы конвертации:
@dataclass
class Bar:
foo: int
def as_frozen(self):
return FrozenBar(self.foo)
@dataclass(frozen=True)
class FrozenBar:
foo: int
def as_unfrozen(self):
return Bar(self.foo)