dieter at 2018/10/17 UTC+8 PM 1:15:01 wrote:
> jf...@ms4.hinet.net writes:
> > Gregory Ewing at 2018/10/16 UTC+8 PM 2:01:01 wrote
> >> 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.
> >
> > The PolyHeader is already initialized by inheritance. Is there any way to 
> > bypass this __init__?
> 
> If there were any, you should find it described in metaclass related 
> documentation.
> 
> Likely, you can ensure that followup calls of "__init__" effectively
> behave as "no-op"s: let the first call place a marker in the initialized
> object and check in later calls whether it is already there.

Hard to find the document of type.__init__. I can only guess it does nothing, 
at least no thing serious, to avoid trouble the metaclass's __init__ may cause 
in a class hierarchy:-)
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to