Počet instancí objektu

Ahoj, dá se nejak zjistit, kolik je aktivních instancí daného objektu a získat na ne reference?

První příklad

    class MyClass:

       counter = 0
       def __init__(self):
           MyClass.counter += 1
       def __del__(self):
           MyClass.counter -= 1

    print MyClass.counter
    c = MyClass()
    print MyClass.counter
    d = MyClass()
    print MyClass.counter
    c = MyClass()
    print MyClass.counter

Druhý příklad

    class MojeTrida:

        inst=[]
        def __init__(self):
            self.__class__.inst.append(self)

    c=MojeTrida()
    c2=MojeTrida()
    c3=MojeTrida()

Nevýhoda: instance se po zániku nebudou uvolňovat.

Třetí příklad - slabé reference

    #!/usr/bin/python
    import weakref, gc

    class Counted:

        reflist = []
        def __init__(self):
            Counted.reflist.append(weakref.ref(self))
        def get_count(self):
            self.reflist = [x for x in self.reflist if x() != None]
            return len(self.reflist)
        get_count = classmethod(get_count)
        def get_instances(self):
            self.reflist = [x for x in self.reflist if x() != None]
            t = [x() for x in self.reflist]
            return [x for x in t if x != None]
        get_instances = classmethod(get_instances)

    a = Counted()
    print Counted.get_count()
    b = Counted()
    print Counted.get_count()
    b = Counted()
    print Counted.get_count()
    del b
    print Counted.get_count()
    print Counted.get_instances()
    del a
    print Counted.get_count()
    print Counted.get_instances()

    c = Counted()
    print gc.get_referrers(c)
    a = [c, Counted(), Counted()]
    print gc.get_referents(a)
    print gc.get_referrers(c)

    print Counted.get_instances()




subject:
  ( 112 subscribers )