--- Original Message ----- > From: Terry Reedy <tjre...@udel.edu> > To: python-list@python.org > Cc: > Sent: Sunday, August 3, 2014 4:43 AM > Subject: Re: Correct type for a simple "bag of attributes" namespace object > > On 8/2/2014 8:59 PM, Ian Kelly wrote: >> On Sat, Aug 2, 2014 at 2:46 PM, Mark Summerfield > <l...@qtrac.plus.com> wrote: >>> On Saturday, 2 August 2014 20:58:59 UTC+1, Ben Finney wrote: >>>> Steven D'Aprano writes: >>>> >>>>> If you need instances which carry state, then object is the > wrong >>>>> class. >>> >>> Fair enough. >>> >>>> Right. The 'types' module provides a SimpleNamespace class > for the >>>> common "bag of attributes" use case:: >>>> >>>> >>> import types >>>> >>> foo = types.SimpleNamespace() >>>> >>> foo.x = 3 >>>> >>> foo >>>> namespace(x=3) >>> >>> This is too much for children (& beginners). >>> >>> But perhaps what I should be asking for is for a new built-in that does > what types.SimpleNamespace() does, so that without any import you can write, > say, >>> >>> foo = namespace(a=1, b=2) >>> # or >>> bar = namespace() >>> bar.a = 1
I find the following obscure (to me at least) use of type() useful exactly for this "bag of attributes" use case: >>> employee = type("Employee", (object,), {}) >>> employee.name = "John Doe" >>> employee.position = "Python programmer" >>> employee.name, employee.position, employee ('John Doe', 'Python programmer', <class '__main__.Employee'>) >>> details = dict(name="John Doe", position="Python programmer") >>> employee = type("Employee", (object,), details) >>> employee.name, employee.position, employee ('John Doe', 'Python programmer', <class '__main__.Employee'>) regards, Albert-Jan -- https://mail.python.org/mailman/listinfo/python-list