class Symbol: def __init__(self, name): # symbol = named class instance self.name = name def __repr__(self): # prints as name return self.name def props(self): # property-list = attributes return self.__dict__ def getprop(self, name): # or just: symbol.prop return getattr(self, name) def putprop(self, name, value): # or just: symbol.prop = value setattr(self, name, value) table = {} def intern(name): try: return table[name] # return existing entry? except KeyError: table[name] = Symbol(name) # else store and return new symbol return table[name]