Задать вопрос
@firstmixon

Как запретить удаление полей класса?

День добрый!
Есть такой код:
class foo(BaseModel)
	name : str

tmp = foo()
tmp.name = "test"
del tmp.name <= Как запретить?
print(tmp.name)


Хотелось бы решить задачу с защитой структуры класса от изменений, то есть предки BaseModel не позволяют добавлять новые поля, но к сожалению позволяют удалять, есть ли способ защитить структуру класса от изменений?

Заранее спасибо за советы!
  • Вопрос задан
  • 244 просмотра
Подписаться 1 Простой 3 комментария
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Академия Эдюсон
    Python-разработчик
    9 месяцев
    Далее
  • Skillbox
    Профессия Python-разработчик + ИИ
    10 месяцев
    Далее
Решения вопроса 1
@dim5x
ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
Переопределить __delattr__?
class foo:
    name: str

    def __delattr__(self, item):
        if item == "name":
            raise AttributeError(f"Нельзя удалять атрибут: '{item}'")
        #     print('что-то печатаем')
        #     pass  # или ничего не делаем
        super().__delattr__(item)


tmp = foo()
tmp.name = "test"
try:
    del tmp.name
except AttributeError as e:
    print(e)
finally:
    print(tmp.name)


>>>Нельзя удалять атрибут: 'name'
>>>test
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы