Using metaclasses to inherit class variables

telesphore4 at gmail.com telesphore4 at gmail.com
Mon May 22 14:19:32 EDT 2006


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




More information about the Python-list mailing list