Oops! This isn't working. As the sequence I'm trying for is.... >>> def set_classvars(**kwargs): ... def __metaclass__(name, bases, classdict): ... for name, value in kwargs.iteritems(): ... if name not in classdict: ... classdict[name] = value ... return type(name, bases, classdict) ... return __metaclass__ ... >>> class C(object): ... __metaclass__ = set_classvars(name='foo', desc='bar', list=[]) ... name = 'not foo' ... >>> C.name, C.desc, C.list ('not foo', 'bar', []) >>> class D(C): ... pass #<<<<<< Use Super's metaclass ... >>> D.name, D.desc, D.list, D.list is C.list ('not foo', 'bar', [], True)
So... I just changed my stuff to be: import copy class ClassVars(type): classVars = {} def __init__(cls, name, bases, dict): for name, value in type(cls).classVars.iteritems(): if name not in dict: setattr(cls, name, copy.copy(value)) def are(**kwargs): return type('', (ClassVars,), {'classVars':kwargs}) Altho I'd like to see what you come up with too... if you persue this -- http://mail.python.org/mailman/listinfo/python-list