Как удалить свойство из объекта в Python
В этом уроке вы узнаете, как использовать класс property() в Python для удаления свойства из объекта.
Чтобы создать свойство класса, вы используете декоратор @property. Декоратор @property использует класс property, имеющий три метода: setter, getter и deleter.
Используя deleter, вы можете удалить свойство из объекта. Обратите внимание, что метод deleter() удаляет свойство объекта, а не класса.
Ниже определяется класс Person со свойством name:
from pprint import pprint class Person: def __init__(self, name): self._name = name @property def name(self): return self._name @name.setter def name(self, value): if value.strip() == '': raise ValueError('name cannot be empty') self._name = value @name.deleter def name(self): del self._name
В классе Person мы используем декоратор @name.deleter. Внутри средства deleter мы используем ключевое слово del для удаления атрибута _name экземпляра Person.
Ниже показан __dict__ класса Person:
pprint(Person.__dict__)
Выход:
mappingproxy({'__dict__': <attribute '__dict__' of 'Person' objects>, '__doc__': None, '__init__': <function Person.__init__ at 0x000001DC41D62670>, '__module__': '__main__', '__weakref__': <attribute '__weakref__' of 'Person' objects>, 'name': <property object at 0x000001DC41C89130>})
Класс Person.__dict__ имеет переменную name. Следующий код создает новый экземпляр класса Person:
person = Person('John')
У person.__dict__ есть атрибут _name:
pprint(person.__dict__)
Выход:
{'_name': 'John'}
В следующем примере используется ключевое слово del для удаления свойства name:
del person.name
Внутри Python выполнит метод deleter, который удаляет атрибут _name из объекта person. person.__dict__ будет пустым следующим образом:
{}
И если вы попытаетесь снова получить доступ к свойству name, вы получите сообщение об ошибке:
print(person.name)
Ошибка:
AttributeError: 'Person' object has no attribute '_name'