Order in metaclass

Nicolas Fleury nid_oizo at yahoo.com_remove_the_
Wed Oct 13 10:39:22 EDT 2004


Peter Otten wrote:
> If you want to record the order of these definitions, you need to pass a
> custom dictionary that keeps track of assignments in the class generation
> code (basically a normal python function comprising the class suite).
> Unfortunately that dictionary - which you see later as the classdict
> parameter of the metaclass __new__() method - is always a dict created in C,
> as was recently discussed on c.l.py (sorry, but all keywords I remember are
> 'metaclass' and 'martelli' - not very selective :-). Below is my (clumsy)
> attempt for a workaround:
> 
> import itertools
> 
> class OrderedValue(object):
>     newIndex = itertools.count(1).next
>     def __init__(self, value):
>         self.value = value
>         self.index = self.newIndex()

That's the solution I finally did after my post (I think I found the 
thread you were referring to).  In my case, having to create instances 
has not been so bad, as I can use them to put other information:

class SomeClass(BinType):
     x = Member(Int32)
     y = Member(Int16)

class SomeOtherClass(BinType):
     a = ArrayMember(Int16, size=256)
     b = Member(SomeClass)
     c = Member(Int32)

This way, I can generate abstract documentation of my binary formats 
without instantiating my types and can instantiate them to dump binary data.

Thx and Regards,
Nicolas



More information about the Python-list mailing list