finalize.py 808 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. """
  2. A module for externalized finalizers.
  3. """
  4. from __future__ import print_function
  5. import weakref
  6. garbageKey = 0
  7. def callbackFactory(num, fins):
  8. def _cb(w):
  9. del refs[num]
  10. for fx in fins:
  11. fx()
  12. return _cb
  13. refs = {}
  14. def register(inst):
  15. global garbageKey
  16. garbageKey += 1
  17. r = weakref.ref(inst, callbackFactory(garbageKey, inst.__finalizers__()))
  18. refs[garbageKey] = r
  19. if __name__ == '__main__':
  20. def fin():
  21. print('I am _so_ dead.')
  22. class Finalizeable:
  23. """
  24. An un-sucky __del__
  25. """
  26. def __finalizers__(self):
  27. """
  28. I'm going away.
  29. """
  30. return [fin]
  31. f = Finalizeable()
  32. f.f2 = f
  33. register(f)
  34. del f
  35. import gc
  36. gc.collect()
  37. print('deled')