class Meta(type): def __new__(metacls, name, bases, dic): print 'new: ', metacls, name, bases if name == 'Z': # X tem que estar definido quando esse codigo rodar!' return X return super(Meta, metacls).__new__(metacls, name, bases, dic) if __name__ == '__main__': __metaclass__ = Meta class X: pass class Y(X): pass class Z: pass print 'Z', Z assert Z is X