Замороженный класс данных Python, позволяющий изменять атрибут с помощью методаPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Замороженный класс данных Python, позволяющий изменять атрибут с помощью метода

Сообщение Anonymous »

Предположим, у меня есть класс данных:

Код: Выделить всё

@dataclass(frozen=True)
class Foo:
id: str
name: str
Я хочу, чтобы это было неизменным (следовательно, Foo.id = True), например, foo.id = bar и foo.name = baz не удалось. Но я хочу иметь возможность удалить идентификатор, вот так:

Код: Выделить всё

foo = Foo(id=10, name="spam")

foo.strip_id()
foo
-> Foo(id=None, name="spam")
Я попробовал несколько вещей, переопределив setattr, но ничего не помогло. Есть ли элегантное решение этой проблемы? (Я знаю, что могу написать метод, который возвращает новый замороженный экземпляр, который будет идентичен, за исключением того, что этот идентификатор был удален, но это кажется немного хакерским, и для этого мне потребуется выполнить foo = foo.strip_id() , поскольку foo.strip_id() на самом деле не изменит foo)

Изменить:

Хотя некоторые комментаторы с этим не согласны, я думаю, что есть законное различие между «полностью изменяемым, делайте с ним все, что хотите» и «неизменяемым, за исключением этого конкретного, строго контролируемого способа»

Подробнее здесь: https://stackoverflow.com/questions/606 ... via-method
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»