class factory

Nick Keighley nick.keighley at marconi.com
Fri Aug 22 08:07:50 EDT 2003


Alex Martelli <aleax at aleax.it> wrote in message news:<5SR0b.21604$zN5.668541 at news1.tin.it>...
> Nick Keighley wrote:

thamks all for help and suggestions.

> > I'm a Python beginner and I'm would like to write a function that
> > returns a class (perhaps a tad ambitious...). I've looked through
> > the FAQ and perused "Python In  A Nutshell" (not a good book to
> > start with?). The only example I found in PiaN used a simple
> 
> If you're an experienced programmer with other languages then
> the Nutshell should be helpful -- if you're a newbie to programming,
> you should start with easier books (but with the kind of tasks
> you're setting yourself I guess you aren't).

no, not a programming beginner. A Python beginner. I was specifically 
trying to do something that was hard (impossible) to do in "normal"
language (eg. C). The idea was try and generate types (ie. classes)
that had a
limited set of values. I'd found the C enum emulators in 

   http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/67107

but they didn't quite do what I wanted.

> [...]  I didn't particularly
> emphasize metaprogramming in the Nutshell -- it's more of a "gee
> whiz" kind of thing and the Nutshell aims to cover solid, everyday,
> bread-and-butter usage.
> 
> > if statement to return one of a selection of pre-existing classes.
> > I'd like to generate a class on-the-fly from a parameter (a dictionary).
> 
> How do you want to use that dict -- as the class's dict?  Then either:
> 
> def makeaclass(fromdict):
>     class X: pass
>     X.__dict__ = fromdict
>     return X
> 
> or
> 
> def makeaclass(fromdict):
>     class X: pass
>     X.__dict__.update(fromdict)
>     return X
> 
> might be helpful.
> 
> 
> > Can Python do this sort of stuff? Does the mean I have to mess with
> > the dreaded meta-classes?
> 
> Metaclasses may be easier to use than sufficiently-general class-building
> functions, actually -- no reason to dread them.  But anyway, yes, Python
> IS pretty good at metaprogramming, too, both with and without metaclasses.


-- 
Nick Keighley




More information about the Python-list mailing list