#!/usr/local/bin/python2 class M(type): def __new__(cls, clsname, bases, dict): if '_name' in dict: dict['name'] = dict['_name'] else: for base in bases: if hasattr(base, '_name'): dict['name'] = base._name break else: dict['name'] = clsname[0].lower() + clsname[1:] return type.__new__(cls, clsname, bases, dict) class C(object): __metaclass__ = M _name = 1 class C2(C, list): pass print C2.name