Hi Pythonistas, I'm stuck in a maze of new style classes and generators. While I love the concepts, I obviously didn't grok them throughout.
I'm trying to generate a bunch of similar classes, where some are contained in list attributes of others, e.g.: class A: def __init__(self): self.id = 'A1' self.b = [instances of B] class B: def __init__(self): self.id = 'B1' Here's the test code, I have: #!/usr/bin/env python # -*- coding: utf8 -*- class A(object): "A" def __init__(self): self.id = None self.b = [] class B(object): "B" def __init__(self): self.id = None class Gen(object): def records(self, cls): for i in range(3): setattr(cls, "id", "%s%s" % (cls.__doc__, i)) yield cls def display(self, rec): for i in rec.__dict__.keys(): if not i.startswith("_"): print "%s: %s: %s" % (rec.__doc__, i, rec.__dict__[i]) class GenA(Gen): def __init__(self): self.genB = GenB() def records(self): for a in Gen.records(self, A()): for b in self.genB.records(): #self.genB.display(b) a.b.append(b) #self.display(a) yield a class GenB(Gen): def records(self): return Gen.records(self, B()) # testing.. aRecs = [] bRecs = [] for i, r in enumerate(GenB().records()): bRecs.append(r) print i, r.id, r for i, r in enumerate(GenA().records()): aRecs.append(r) print i, r.id, r for b in r.b: print b.id, b Here's the commented output: # even if I keep a reference to each rec, the object is reused: 0 B0 <__main__.B object at 0xb7bd0f8c> 1 B1 <__main__.B object at 0xb7bd0f8c> 2 B2 <__main__.B object at 0xb7bd0f8c> # same here, with additional quadratic behavior, I do not understand 0 A0 <__main__.A object at 0xb7bd206c> B2 <__main__.B object at 0xb7bd210c> B2 <__main__.B object at 0xb7bd210c> B2 <__main__.B object at 0xb7bd210c> 1 A1 <__main__.A object at 0xb7bd206c> B2 <__main__.B object at 0xb7bd210c> B2 <__main__.B object at 0xb7bd210c> B2 <__main__.B object at 0xb7bd210c> B2 <__main__.B object at 0xb7bd20ec> B2 <__main__.B object at 0xb7bd20ec> B2 <__main__.B object at 0xb7bd20ec> 2 A2 <__main__.A object at 0xb7bd206c> B2 <__main__.B object at 0xb7bd210c> B2 <__main__.B object at 0xb7bd210c> B2 <__main__.B object at 0xb7bd210c> B2 <__main__.B object at 0xb7bd20ec> B2 <__main__.B object at 0xb7bd20ec> B2 <__main__.B object at 0xb7bd20ec> B2 <__main__.B object at 0xb7bd0f8c> B2 <__main__.B object at 0xb7bd0f8c> B2 <__main__.B object at 0xb7bd0f8c> I expected to get 3 different class objects from both sections, with each A containing 3 different Bs in the latter section, but obviously got something else. Could some kind soul help me to distangle my mind twist here? Am I healable? TIA, Pete -- http://mail.python.org/mailman/listinfo/python-list