Ordering attributes for dynamically generated class

Duncan Booth duncan.booth at invalid.invalid
Sun Jan 18 11:45:24 EST 2009


Aaron Brady <castironpi at gmail.com> wrote:

> On Jan 18, 9:52 am, David Pratt <fairwinds... at gmail.com> wrote:
>> Hi list. I use 'type' to generate classes but have a need to order  
>> the attributes for the generated class. Of course a dict is not going  
>> to maintain ordering. Is there any way to dynamically generate a  
>> class with attributes in specific order?
>>
>> my_new_class = type( 'MyNewClass', tuple_of_bases, dict_of_attributes)
>>
>> Many thanks,
>> David
> 
> Just a thought, you can subclass 'dict' and assign an instance of it
> to the __dict__ member of your new instance.
> 
You can certainly pass a subclass of 'dict' to type(), in fact in Python 
3.0 you can use a metaclass with a __prepare__ method to substitute your 
own value for __dict__ in any class definition, but I don't think your own 
type will preserved when the instance is actually constructed.

A simple solution which works in any version of Python is just to maintain 
an attribute with the desired ordering and override __dir__ to return the 
attributes in that order.



More information about the Python-list mailing list