Correct type for a simple "bag of attributes" namespace object
Albert-Jan Roskam
fomcl at yahoo.com
Sun Aug 3 05:17:44 EDT 2014
--- Original Message -----
> From: Terry Reedy <tjreedy at udel.edu>
> To: python-list at 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
> <list at 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
More information about the Python-list
mailing list