George Sakkis a écrit :
(snip)
> Anyway, here's something to get you
> started; all a user has to do is derive (directly or indirectly) from
> InstanceTracker and, if a class C defines __init__,
> super(C,self).__init__() should be called explicitly:
Actually, you don't even need that restriction - just move the tracking
code from __init__ to __new__.
>
> from collections import deque
> from weakref import WeakKeyDictionary
>
> class InstanceTracker(object):
def __new__(cls, *args, **kw):
try:
all = cls.__dict__['__instances__']
except KeyError:
cls.__instances__ = all = WeakKeyDictionary()
self = super(InstanceTracker, self).__new__(cls)
all[self] = None
return self
(NB : untested)
--
http://mail.python.org/mailman/listinfo/python-list