Рубрики
Без рубрики

Python Del Estast, Delattr () Функция

Python del allation, python delattr () Функция, атрибут объекта python, python delattr (python delattr () Функция AttributeError, удаление VS, установленных на None

Автор оригинала: Pankaj Kumar.

Python DEL Action и функция Delattr () используется для удаления атрибута объекта. Оба они делают то же самое. Однако функция Delattr () полезна, когда мы хотим динамически удалить атрибут, например, удаление атрибута объекта на основе ввода пользователя.

Python del allation.

Допустим, у нас есть класс сотрудника, определенный как:

class Employee:
    id = -1
    name = ''

    def __init__(self, i, n, r):
        self.id = i
        self.name = n
        self.role = r

    def __str__(self):
        return "Employee[id={}, name={}, role={}]".format(self.id, self.name, self.role)

Обратите внимание, что ID и Имя являются Переменные классов тогда как . роль является переменной экземпляра.

Давайте посмотрим на примере использования оператора del для удаления атрибутов классов.

e = Employee(10, 'Pankaj', 'CEO')
print(e)
print(e.id)
print(e.name)
print(e.role)

# del with class attribute
del e.id
print(e)
print(e.id)

del e.name
print(e.name)

Выход:

Employee[id=10, name=Pankaj, role=CEO]
10
Pankaj
CEO
Employee[id=-1, name=Pankaj, role=CEO]
-1

Поэтому, когда мы удалили переменную класса, используя del allow, в дальнейшем доступе возвращается значение по умолчанию.

Теперь давайте посмотрим, что произойдет, когда мы стараемся удалить переменную экземпляра, а затем получить доступ к ней.

del e.role
print(e.role)

Выход:

AttributeError: 'Employee' object has no attribute 'role'

Таким образом, когда атрибут экземпляра удален, будущий доступ к ним вызывает AttackueError.

Python Delattr ()

Синтаксис Python Delattr ():

delattr(object, name)

Первый аргумент – это объект, атрибут которого мы хотим удалить. Второй аргумент – это имя атрибута, которое мы хотим удалить из объекта.

Давайте посмотрим на некоторые примеры функции Delattr ().

e = Employee(10, 'Pankaj', 'CEO')
print(e)
print(e.id)
print(e.name)
print(e.role)

delattr(e, 'id')
print(e)
print(e.id)

delattr(e, 'name')
print(e.name)

Выход:

Employee[id=10, name=Pankaj, role=CEO]
10
Pankaj
CEO
Employee[id=-1, name=Pankaj, role=CEO]
-1

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

delattr(e, 'role')
print(e.role)

Выход:

AttributeError: 'Employee' object has no attribute 'role'

Python del vs delattr ()

Из приведенных выше приведенных примеров ясно, что функция Deal reputty и Delattr () делает то же самое. Поэтому, когда использовать DEL ELUPMENT и когда выйти на функцию Delattr ()?

Если вы устанавливаете атрибут объекта статически в программе, имеет смысл использовать оператор del. Однако функция Delattr () является единственным способом, когда вы хотите динамически назначить атрибут удалить. Например, принимая ввод пользователя, чтобы удалить атрибут объекта. Давайте посмотрим на это простым примером.

# delattr() benefit with dynamic attribute deletion
e = Employee(20, 'Lisa', 'Editor')

print(e)
attr = input('Please enter attribute to delete, valid values are id, name and role\n')
delattr(e, attr)
print(e)

Выход:

Employee[id=20, name=Lisa, role=Editor]
Please enter attribute to delete, valid values are id, name and role
id
Employee[id=-1, name=Lisa, role=Editor]

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

Employee[id=20, name=Lisa, role=Editor]
Please enter attribute to delete, valid values are id, name and role
role
Traceback (most recent call last):
  File "/Users/pankaj/Documents/github/journaldev/Python-3/basic_examples/python_del_delattr_examples.py", line 47, in 
    print(e)
  File "/Users/pankaj/Documents/github/journaldev/Python-3/basic_examples/python_del_delattr_examples.py", line 11, in __str__
    return "Employee[id={}, name={}, role={}]".format(self.id, self.name, self.role)
AttributeError: 'Employee' object has no attribute 'role'

Python delete атрибут vs установка ни одного

Если вы хотите повторно использовать атрибут, вы можете настроить его на них. Однако, если вы удалите атрибут экземпляра, вы получите ошибку в доступе к нему, если вы не установите его снова.

# set to None vs del/delattr
e.role = None
print('Role =', e.role)

del e.role
e.role = 'CEO'
print('Role =', e.role)

Выход:

Role = None
Role = CEO

Удаление уже удаленного атрибута

Если мы попытаемся удалить уже удаленный атрибут, мы получим AttributeError Отказ

e = Employee(20, 'Lisa', 'Editor')

del e.id
# del e.id # AttributeError: id

delattr(e, 'name')
# delattr(e, 'name')  # AttributeError: name

Удаление несуществующего атрибута

Если мы попытаемся удалить атрибут объекта, который не существует, мы получим AttributeError Отказ

# del e.x  # AttributeError: x
# delattr(e, 'x')  # AttributeError: x

Это все для функции Python del Phauge и Delattr ().

Ссылка: Официальная документация