1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| #coding:latin-1
#Méthode 2, avec n'importe quelle classe!
import gc
def getInstances(classRef):
if classRef in (int, str, float, unicode) or isinstance(classRef,(int,str,float,unicode)):
raise TypeError("classRef must be a class, not of type %s " % (classRef))
lst = gc.get_referrers(classRef)
res = list()
findAllInstances(classRef, lst, res)
return res
def findAllInstances(classRef, db , lst):
if classRef in (int, str, float, unicode):
raise TypeError("classRef must be a class, not of type <%s> " % (classRef))
if isinstance(db, (list, tuple, set)):
for obj in db:
findAllInstances(classRef, obj, lst)
elif isinstance(db, dict):
for obj in db.values():
findAllInstances(classRef, obj, lst)
elif isinstance(db, classRef) and not (db in lst):
lst.append(db)
class Toto():
def __init__(self):
pass
a = Toto()
b = Toto()
db = dict(me=Toto(),you=Toto(),this=Toto(),moi=Toto())
lst = list(db.values())
print ("Instances - 1")
print (getInstances(Toto))
del (lst, db)
gc.collect()
print ("\nInstances - 2")
print (getInstances(Toto)) |
Partager