programming oriented opp exercises español and python class oop

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):

    1. Saliendo del bloque de código donde se declaró la variable (utilizada por primera vez)
    2. el objeto destructor liberará referencias de todos los atributos / variable de método -> referencias de objeto
    3. 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).

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.