Функция delattr()
и оператор del
используются для удаления атрибутов в Python, но delattr()
можно использовать динамически.
Синтаксис del:
del object.name
Рассмотрим пример с del
:
class Person:
id = 0
name = 'Default'
def __init__(self, id, name, age):
self.id = id
self.name = name
self.age = age
def __str__(self):
return f'Person - {self.id}, {self.name}, {self.age}'
person = Person(1, 'Vladislav', 23)
print(person.name)
print(person.age)
print(person.id)
del person.id
del person.name
print(person.id)
print(person.name)
Пояснение:
- У нас есть класс Person, с установленным по умолчанию id, name.
- Мы задаем name и id, а потом удаляем name и id.
Результат:
>>> Vladislav
>>> 23
>>> 1
>>> 0
>>> Default
>>> Person - 0, Default, 23
После удаления мы получаем дефолтные значения, заданные в классе.
Рассмотрим delattr()
Синтаксис:
delattr(object, name)
Рассмотрим пример с delattr()
class Person:
id = 0
name = 'Default'
def __init__(self, id, name, age):
self.id = id
self.name = name
self.age = age
def __str__(self):
return f'Person - {self.id}, {self.name}, {self.age}'
person = Person(1, 'Vladislav', 23)
print(person.name)
print(person.age)
print(person.id)
delattr(person, 'id')
delattr(person, 'name')
print(person.id)
print(person.name)
print(person)
Результат:
>>> Vladislav
>>> 23
>>> 1
>>> 0
>>> Default
>>> Person - 0, Default, 23
Из приведенных примеров, ясно, что оператор del
и функция delattr()
эквивалентны друг другу и делают одно и тоже. Но когда же использовать их правильнее?
Если вы собираетесь удалять атрибут статически, имеет смысл использовать оператор del
. Но, функция delattr()
- позволяет вам динамически назначить необходимый атрибут для удаления. Например если мы создадим пользовательский ввод для удаления атрибута.
Пример динамического использования:
class Person:
id = 0
name = 'Default'
age = 0
def __init__(self, id, name, age):
self.id = id
self.name = name
self.age = age
def __str__(self):
return f'Person - {self.id}, {self.name}, {self.age}'
person = Person(1, 'Vladislav', 23)
print(person)
attr = input('Please enter attribute to delete, valid values are id, name and role\n')
delattr(person, attr)
print(person)
Результат:
>>> Person - 1, Vladislav, 23
>>> Please enter attribute to delete, valid values are id, name and role
<<< age
>>> Person - 1, Vladislav, 0
>>> Person - 1, Vladislav, 23
>>> Please enter attribute to delete, valid values are id, name and role
<<< name
>>> Person - 1, Default, 23
Удаление несуществующего атрибута
Если мы попытаемся удалить несуществующий атрибут объекта, мы получим AttributeError
. То же самое, если мы удалим атрибут, который уже был удален, мы также получим AttributeError.