opp - python object oriented programming pdf
Python: ¿cómo "matar" una instancia/objeto de clase? (3)
En general:
- Cada variable de enlace -> objeto aumenta el contador de referencia del objeto interno
hay varias formas habituales de disminuir la referencia (objeto de desreferencia -> vinculación de variables):
- Saliendo del bloque de código donde se declaró la variable (utilizada por primera vez)
- el objeto destructor liberará referencias de todos los atributos / variable de método -> referencias de objeto
- llamando a la
del variable
también se eliminará la referencia en el contexto actual
después de que se eliminan todas las referencias a un objeto (contador == 0), se convierte en un buen candidato para la recolección de basura, pero no se garantiza que se procesará ( consulte aquí ):
CPython actualmente utiliza un esquema de conteo de referencias con (opcional) detección retardada de basura enlazada cíclicamente, que recolecta la mayoría de los objetos tan pronto como se vuelven inaccesibles, pero no se garantiza que recolecte basura que contenga referencias circulares. Consulte la documentación del módulo gc para obtener información sobre cómo controlar la recolección de basura cíclica. Otras implementaciones actúan de manera diferente y CPython puede cambiar. No dependa de la finalización inmediata de los objetos cuando se vuelven inalcanzables (por ejemplo, siempre cierre los archivos).
cuántas referencias existen en el objeto, use sys.getrefcount
módulo para configurar / comprobar la recolección de basura es gc
GC llamará al método object.__ del__ al destruir el objeto ( referencia adicional aquí )
algunos objetos inmutables, como las cadenas, se manejan de una manera especial; por ejemplo, si dos vars contienen la misma cadena, es posible que hagan referencia al mismo objeto, pero algunos no verifiquen la identificación de objetos, ¿por qué el valor devuelto desde id (...) ¿cambio?
La identificación del objeto se puede encontrar con la función incorporada
módulo memory_profiler parece interesante - Un módulo para monitorear el uso de la memoria de un programa python
hay muchos recursos útiles para el tema, un ejemplo: encontrar todas las referencias a un objeto en Python
Quiero que una clase de Roach "muera" cuando alcanza una cierta cantidad de "hambre", pero no sé cómo eliminar la instancia. Puede que me esté equivocando con mi terminología, pero lo que quiero decir es que tengo un montón de "roaches" en la ventana y quiero que desaparezcan por completo algunas específicas.
Te mostraría el código, pero es bastante largo. Tengo la clase Roach que se adjunta en una lista de población de cucarachas de Mastermind.
No puedes forzar la eliminación de un objeto Python; se eliminará cuando nada lo haga referencia (o cuando esté en un ciclo que solo se mencione como los elementos del ciclo). Tendrás que decirle a tu "Mente Maestra" que borre su referencia.
del somemastermind.roaches[n]
for i,roach in enumerate(roachpopulation_list)
if roach.hunger == 100
del roachpopulation_list[i]
break
Elimine la instancia eliminándola de su lista de población (que contiene todas las instancias de roach).
Si tus Roaches son Sprites creados en Pygame, entonces un simple comando de .kill eliminaría la instancia.