----- Original Message -----

> From: Albert-Jan Roskam <fo...@yahoo.com.dmarc.invalid>
> To: Terry Reedy <tjre...@udel.edu>; "python-list@python.org" 
> <python-list@python.org>
> Cc: 
> Sent: Sunday, August 3, 2014 11:17 AM
> Subject: Re: Correct type for a simple "bag of attributes" namespace object

<snip>

>>>>>   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'>)


PS to my previous mail: class() can (should?) be used here to do the exact same 
thing but it feels a little like "Getting your car [OOP] just because you need 
an ashtray [bundled items]". :-)
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to