----- Original Message -----
> From: Peter Otten <__pete...@web.de> > To: python-list@python.org > Cc: > Sent: Sunday, August 3, 2014 11:37 AM > Subject: Re: Correct type for a simple "bag of attributes" namespace object > > Albert-Jan Roskam wrote: > >> 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'>) > > Are you sure you know what you are doing? The above is equivalent to > >>>> class employee: > ... name = "John Doe" > ... position = "Python programmer" > ... >>>> employee.name, employee.position, employee > ('John Doe', 'Python programmer', <class > '__main__.employee'>) >>>> type(employee) > <class 'type'> > > Basically you are using classes as instances. While there is no fundamental > difference between classes and instances in Python you'll surprise readers > of your code and waste some space: Yes, I know that it is equivalent, but I have always found it kind of ugly to use class() just to bundle a number of items. Like you are 'announcing OOP' (not sure how to put this into words), and then it's merely a simple bundle. Or maybe it's just me being silly, because it's even in the Python tutorial: https://docs.python.org/2/tutorial/classes.html#odds-and-ends >>>> import sys >>>> sys.getsizeof(employee) > 976 >>>> class Employee: pass > ... >>>> employee = Employee() >>>> employee.name = "John Doe" >>>> employee.position = "Python programmer" >>>> sys.getsizeof(employee) > 64 Wow, I was not aware of that at all. So they are not equivalent after all. -- https://mail.python.org/mailman/listinfo/python-list