Is there a reason why don't you drop the metaclass and perform the validation step after the class has been created using a generic function? class Tour(MotourController): pass Tour.sqlobjectclass = model.Tour Tour.widget_edit = TourEdit(controller=Tour, name = "tourheader", ...) Tour = validate(Tour)