Using metaclassed to dynamically generate a class based on a parameter to the objects init function.

sashang at gmail.com sashang at gmail.com
Fri Jun 23 07:19:17 EDT 2006


Bruno Desthuilliers wrote:
> sashang at gmail.com wrote:
> > Hi
> >
> > I'd like to use metaclasses to dynamically generate a class based on a
> > parameter to the objects init function.
>
> Do you really need a metaclass for this ?
>
> > For example:
> >
> > class MetaThing(type):
> >     def __init__(cls, name, bases, dict, extra_information):
> >         super(MetaThing, cls).__init__(name, bases, dict)
> >         #setup the class based on the parameter extra_information
> >
> > class Thing:
> >     __metaclass__ = MetaThing
> >     def __init__(self, extra_information):
> >          #Somehow pass extra_information to the MetaThing
> >
> > extra_information = 1
> > t = Thing(extra_information)
>
> Why would you want a new *class* here ?
>
> > The above sample won't work but I hope it demonstrates what I'm trying
> > to do.
>
> Not enough, I'm afraid - unless it's just me being dumb. From what I see
> here, you just can add the extra informations on the object in the
> initializer. What's your *real* use case ?
>
>

The extra_information is used in MetaThing to tell it what attributes
to add to the class. For example:

class MetaThing(type):
     def __init__(cls, name, bases, dict, extra_information):
         super(MetaThing, cls).__init__(name, bases, dict)
         #setup the class based on the parameter extra_information
         setattr(cls, make_name(extra_information),
make_object(extra_information))

Does that clarify things? I might have the wrong approach - I'm new to
metaclasses. However I do think the solution to my problem lies with
them since I have to dynamically generate a class and metaclasses
provide a mechanism for doing this.




More information about the Python-list mailing list