from collections import defaultdict
from itertools import count
class Var(object):
def __init__(self, name):
self.name = name
def __repr__(self):
return "Var(%s)" % self.name
class vardict(defaultdict):
def __init__(self, *args, **kwargs):
super(vardict, self).__init__(Var, *args, **kwargs)
def __missing__(self, key, unique=count()):
if self.default_factory is None:
raise KeyError(key)
if key == "_":
return self.default_factory(key + str(next(unique)))
self[key] = value = self.default_factory(key)
return value
if __name__ == "__main__":
vdict = vardict()
vlist = []
vlist.append(vdict["First"])
vlist.append(vdict["Second"])
vlist.append(vdict["_"])
vlist.append(vdict["First"])
vlist.append(vdict["Second"])
vlist.append(vdict["_"])
vlist.sort()
print
for key, value in vdict.items():
print key, ":", value
print
for each in vlist:
print id(each), ":", each