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()
- Eliminación dinámica: del es más explícito y eficiente y delattr() permite la eliminación dinámica de atributos.
- 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.
- 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