# Instances inherit from classes and their supers normally class SuperMetaObj: def __call__(self, classname, supers, classdict): print('In SuperMetaObj.call:', classname, supers, classdict, sep='\n...') Class = self.__New__(classname, supers, classdict) self.__Init__(Class, classname, supers, classdict) return Class class SubMetaObj(SuperMetaObj): def __New__(self, classname, supers, classdict): print('In SubMetaObj.new: ', classname, supers, classdict, sep='\n...') return type(classname, supers, classdict) def __Init__(self, Class, classname, supers, classdict): print('In SubMetaObj.init:', classname, supers, classdict, sep='\n...') print('...init class object:', list(Class.__dict__.keys())) class Super: pass print('Making class') class Hack(Super, metaclass=SubMetaObj()): # Invoke Sub instance via Super.__call__ data = 1 # Called at end of statement def meth(self, arg): return self.data + arg print('Making instance') X = Hack() print('Attrs:', X.data, X.meth(2))