jf...@ms4.hinet.net wrote:
class Structure(metaclass=StructureMeta): ...

class PolyHeader(Structure): ...

As my understanding, the metaclass's __init__ was called when a class was
created. In the above example, both the Structure and PolyHeader called it.
My question is: because the PolyHeader inherited Structure, is it reasonable
for PolyHeader to call this __init__ again? Will it cause any possible
trouble?

It's reasonable for both to call it, because they're distinct
instances of StructureMeta, each of which need to be initialised.

Whether it will cause a problem depends on what StructureMeta's
__init__ is supposed to do. Presumably you want a given structure
class to start allocating its offsets where its base class left
off, in which case you may need to do something like this:

class StructureMeta(type):
    def __init__(self, clsname, bases, clsdict):
        if bases:
           offset = bases[0].offset # assuming there isn't more than one base
        else:
           offset = 0
        ...

(BTW, why do you use setattr() to set the offset attribute
instead of just doing self.offset = offset?)

--
Greg
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to