Steven D'Aprano wrote: > I would like to generate a new object each time I import a name from a > module, rather than getting the same object each time. For example, > currently I might do something like this: > > # Module > count = 0 > def factory(): > # Generate a unique object each time this is called > global count > count += 1 > return "Object #%d" % count > > > # Calling module > from Module import factory > a = factory() # a == "Object #1" > b = factory() # b == "Object #2" > del factory > > > I'm looking for a way to hide the generation of objects from the caller, > so I could do something like this: > > from Module import factory() as a # a == "Object #1" > from Module import factory() as b # b == "Object #2" > > except of course that syntax is illegal.
How about >>> class A(object): ... def __init__(self): ... self._n = 0 ... @property ... def a(self): ... try: ... return self._n ... finally: ... self._n += 1 ... >>> import sys >>> sys.modules["yadda"] = A() >>> from yadda import a >>> from yadda import a as b >>> a, b (0, 1) Peter -- http://mail.python.org/mailman/listinfo/python-list