delattr() y del() en Python

delattr

El método delattr() se usa para eliminar el atributo nombrado del objeto, con el permiso previo del objeto. 
Sintaxis: 
 

delattr(object, name)

The function takes only two parameter:

object :  from which 
the name attribute is to be removed.
name :  of the attribute 
which is to be removed.

The function doesn't returns any value, 
it just removes the attribute, 
only if the object allows it.

El trabajo: supongamos que tenemos una clase con el nombre Geek y tiene cinco estudiantes como atributo. Entonces, usando el método delattr(), podemos eliminar cualquiera de los atributos. 
 

Python3

# Python code to illustrate delattr()
class Geek:
  stu1 = "Henry"
  stu2 = "Zack"
  stu3 = "Stephen"
  stu4 = "Amy"
  stu5 = "Shawn"
 
names = Geek()
 
print('Students before delattr()--')
print('First = ',names.stu1)
print('Second = ',names.stu2)
print('Third = ',names.stu3)
print('Fourth = ',names.stu4)
print('Fifth = ',names.stu5)
 
# implementing the method
delattr(Geek, 'stu5')
 
print('After deleting fifth student--')
print('First = ',names.stu1)
print('Second = ',names.stu2)
print('Third = ',names.stu3)
print('Fourth = ',names.stu4)
# this statement raises an error
print('Fifth = ',names.stu5)

Producción: 
 

Students before delattr()--
First =  Henry
Second =  Zack
Third =  Stephen
Fourth =  Amy
Fifth =  Shawn
After deleting fifth student--
First =  Henry
Second =  Zack
Third =  Stephen
Fourth =  Amy

Cuando la ejecución se mueve a la última línea del programa, es decir, cuando se llama al quinto atributo, el compilador genera un error: 
 

Traceback (most recent call last):
  File "/home/028e8526d603bccb30e9aeb7ece9e1eb.py", line 25, in 
    print('Fifth = ',names.stu5)
AttributeError: 'Geek' object has no attribute 'stu5'

del operador

Hay otro operador en Python que hace un trabajo similar al método delattr(). Es el operador del . Vamos a ver cómo funciona. 
 

Python3

# Python code to illustrate del()
class Geek:
  stu1 = "Henry"
  stu2 = "Zack"
  stu3 = "Stephen"
  stu4 = "Amy"
  stu5 = "Shawn"
 
names = Geek()
 
print('Students before del--')
print('First = ',names.stu1)
print('Second = ',names.stu2)
print('Third = ',names.stu3)
print('Fourth = ',names.stu4)
print('Fifth = ',names.stu5)
 
# implementing the operator
del Geek.stu5
 
print('After deleting fifth student--')
print('First = ',names.stu1)
print('Second = ',names.stu2)
print('Third = ',names.stu3)
print('Fourth = ',names.stu4)
# this statement raises an error
print('Fifth = ',names.stu5)

Producción: 
 

Students before del--
First =  Henry
Second =  Zack
Third =  Stephen
Fourth =  Amy
Fifth =  Shawn
After deleting fifth student--
First =  Henry
Second =  Zack
Third =  Stephen
Fourth =  Amy

El resultado es el mismo con un error: 
 

Traceback (most recent call last):
  File "/home/7c239eef9b897e964108c701f1f94c8a.py", line 26, in 
    print('Fifth = ',names.stu5)
AttributeError: 'Geek' object has no attribute 'stu5'

del vs delattr()

  1. Eliminación dinámica: del es más explícito y eficiente y delattr() permite la eliminación dinámica de atributos.
  2. Velocidad: si se consideran y ejecutan los programas anteriores, existe una ligera diferencia entre la velocidad de ejecución. del es ligeramente más rápido en comparación con delattr(), dependiendo de la máquina.
  3. Instrucciones de código de bytes: del también requiere menos instrucciones de código de bytes en comparación con delattr().

Así que concluimos la comparación diciendo que del es ligeramente más rápido que delattr, pero cuando se trata de la eliminación dinámica de atributos, delattr() tiene ventaja ya que no es posible con el operador del.
 

Publicación traducida automáticamente

Artículo escrito por Chinmoy Lenka y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *