Функция delattr() и оператор del в Python
avatar
7 | (offline)
❤️‍🔥Notehunter Developer
Добавлено:
Категория: Основы «Python»
Комментариев: 0

Функция 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.

Теги записи: Python, Основы Python, delattr(), del,
Комментарии к статье 0
Комментариев нет
Форма добавления комментария (необходима регистрация)