On Fri, 21 Nov 2008 15:11:20 -0700, Joe Strout wrote: > I have a function that takes a reference to a class,
Hmmm... how do you do that from Python code? The simplest way I can think of is to extract the name of the class, and then pass the name as a reference to the class, and hope it hasn't been renamed in the meantime: def foo(cls_name, item_args): # Won't necessarily work for nested scopes. cls = globals()[cls_name] item = cls(**itemArgs) return item instance = foo(Myclass.__name__, {'a':1}) Seems awfully complicated. If I were you, I'd forget the extra layer of indirection and just pass the class itself, rather than trying to generate some sort of reference to it. Let the Python virtual machine worry about what is the most efficient mechanism to use behind the scenes. [...] > But now I want to generalize this to handle a set of mix-in classes. > Normally you use mixins by creating a class that derives from two or > more other classes, and then instantiate that custom class. But in my > situation, I don't know ahead of time which mixins might be used and in > what combination. So I'd like to take a list of class references, and > instantiate an object that derives from all of them, dynamically. > > Is this possible? If so, how? It sounds like you need to generate a new class on the fly. Here's one way: # untested def foo(cls, item_args, mixins=None): superclasses = [cls] + (mixins or []) class MixedClass(*superclasses): pass item = MixedClass(**itemArgs) return item instance = foo(MyClass, {'a':1}, [Aclass, Bclass, Cclass]) -- Steven -- http://mail.python.org/mailman/listinfo/python-list