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