Esto puede ser tonto, pero ha estado molestando la parte posterior de mi cerebro por un tiempo.
Python nos brinda dos formas integradas de eliminar atributos de los objetos, la palabra del comando del y la función integrada delattr . Prefiero delattr porque creo que es un poco más explícito:
del foo.bar
delattr(foo, "bar")
Pero me pregunto si podría haber diferencias ocultas entre ellos.

dismodulo. Puede ejecutarlo desde la línea de comandos usandopython -m disy escribiendo algún código, o desmontar una función condis.dis().Considere los siguientes ejemplos:
o:
No puedes hacerlo con del .
fuente
del self.__dict__[name], suponiendo, por supuesto, que no haya asuntos divertidos con laSin lugar a dudas el primero. En mi opinión, esto es como preguntar si
foo.bares mejor quegetattr(foo, "bar"), y no creo que nadie haga esa pregunta :)fuente
if hasattr(obj, 'var') and obj.var == ...... ¡podría reducir esto a,if getattr(obj, 'var', None) == ...en la mayoría de los casos! Un poco más corto y más fácil de leer, creo.hasattrrealidad llamagetattrEs realmente una cuestión de preferencia, pero la primera es probablemente preferible. Solo usaría el segundo si no conoce el nombre del atributo que está eliminando antes de tiempo.
fuente
Al igual que getattr y setattr, delattr solo debe usarse cuando se desconoce el nombre del atributo.
En ese sentido, es más o menos equivalente a varias características de Python que se utilizan para acceder a la funcionalidad integrada en un nivel inferior al que normalmente tiene disponible, como en
__import__lugar deimporty enoperator.addlugar de+fuente
No estoy seguro sobre el funcionamiento interno, pero desde una reutilización de código y no sea una perspectiva de compañero de trabajo, use del. También es más claro y entendido por personas que vienen de otros idiomas.
fuente
Si crees que
delattres más explícito, ¿por qué no usarlogetattrtodo el tiempo en lugar de hacerloobject.attr?En cuanto a debajo del capó ... su suposición es tan buena como la mía. Si no significativamente mejor.
fuente
Es una vieja pregunta, pero me gustaría poner mis 2 centavos.
Sin embargo,
del foo.bares más elegante, a veces lo necesitarásdelattr(foo, "bar"). Supongamos que si tiene una interfaz de línea de comandos interactiva que permite a un usuario eliminar dinámicamente cualquier miembro del objeto escribiendo el nombre , entonces no tiene más remedio que usar el último formulario.fuente