On Mon, 18 Nov 2013 13:02:26 -0800, John Ladasky wrote: > I am implementing a state machine. The outputs of the various states in > the machine have variable contents. I started by making dictionaries > for each state output, but I soon tired of the bracket-and-quote-mark > syntax for referring to the contents of these state output dictionaries. > That's why I am switching to named tuples. It doesn't affect the > __name__ issue, since dictionaries also cannot be called. > > I want to capture the names of the executed states in a record of the > state machine's history. This information is already encoded in the > namedtuple's type.
I find this rather confusing. Does every state have it's own unique namedtuple class? state1 = namedtuple("State1", ("x", "y"))(1, 2) state2 = namedtuple("State2", ("x", "y"))(5, 7) state3 = namedtuple("State3", ("x", "y"))(0, 2) [...] Seems excessive -- you're defining many classes, each one of which has only a single instance. I'd be more inclined to just use a class object directly, with a little helper function to handle the tedious bits: def state(name, x, y): class Inner(object): pass Inner.x = x Inner.y = y Inner.__name__ = Inner.name = name return Inner And in use: py> state1 = state('state1', 100, 101) py> state1 <class '__main__.state1'> py> state1.name 'state1' py> state1.x 100 But I don't really understand how you are using these state objects, so I'm not sure if this is appropriate or not. -- Steven -- https://mail.python.org/mailman/listinfo/python-list