Making classes from Metaclasses globally available

David MacQuigg dmq at gain.com
Wed Jun 16 15:29:56 EDT 2004


On Wed, 16 Jun 2004 00:28:46 -0400, "Jean-François Doyon"
<jfdoyon at methane.ca> wrote:

>Hello,
>
>I'm using MetaClasses to create classes.

Why use metaclasses?  The metaclass wizards seem to be telling us that
these are special tools for Python developers, not intended for
"mortal users".

>How do I make these new classes "globally" available?

Can't you just generate your classes with an ordinary function, and
assign them to whatever global name you want?

def factory(var1,func1):
    class C:
        const1 = 123
        def commonfunc(self):
            print "Hello from commonfunc"
    setattr(C, 'var1', var1)
    setattr(C, func1.__name__, func1)
    return C

Then whenever you need a new class, just call the factory with
whatever variable data and functions you want to add to each class.

C1 = factory(var1,func1)  # A unique class
c1 = C1()                 # An instance of that class

-- Dave

*************************************************************     *
* David MacQuigg, PhD              * email:  dmq at gain.com      *  *
* IC Design Engineer               * phone:  USA 520-721-4583  *  *  *
* Analog Design Methodologies                                  *  *  *
*                                  * 9320 East Mikelyn Lane     * * *
* VRS Consulting, P.C.             * Tucson, Arizona 85710        *
*************************************************************     *


>I probably just have to assign them to something magic, but I can't seem to
>figure out which one.
>
>if I do:
>
>MetaClass('Klass', (), {})
>
>The resulting class needs to be assigned to something:
>
>    myclass = MetaClass('Klass', (), {})
>
>The problem is that I'm  looping and don't know in advance how many classes
>there will be.
>
>So right now I have something like:
>
>msclasses[clsname] = MapServerMetaClass(str(clsname), (),
>{'schema':list,'__init__':MapServerClassInit})
>
>inside a loop.
>
>Problem is I really don't want to have the classes stuck inside that dict.
>I want them "globally" available as if I had simply made a "class"
>declaration at the top of the file.
>
>Any ideas or suggestions?
>
>Thanks,
>J.F.
>




More information about the Python-list mailing list