Używam obiektu __del__()
wypisać ją ze zdarzenia (z wykorzystaniem schematu zdarzenie podobne do this):Nie można odwoływać się do importowanego modułu w __ __del()
import my_enviroment
class MyClass():
def __del__(self):
my_environment.events.my_event -= self.event_handler_func
dziwne otrzymałem następujący błąd przy koniec programu:
Exception AttributeError: "'NoneType' object has no attribute 'events'" in <bound method MyClass.__del__ of <myclass.MyClass instance at 0x04C54580>> ignored
Jak to możliwe ?! my_environment
to moduł, który zaimportowałem, jak to możliwe, że może to być Brak? (events
jest globalnym obiektem w nim z hakami zdarzeń takich jak my_event
)
W jaki sposób zostanie to wywołane (poza zakończeniem programu)? Czy przewodnik zdarzeń nie miałby odniesienia do obiektu, który uniemożliwiłby gromadzenie śmieci? – interjay
@interjay - Niektóre obiekty MyClass żyją podczas biegu, a niektóre są krótkotrwałe. Dodałem to wyczyszczenie zdarzenia dla późniejszego przypadku. – Jonathan
Chodzi mi o to, że to nigdy nie będzie wywoływane dla obiektów krótkotrwałych, ponieważ obsługa zdarzeń ma do nich odniesienie. – interjay