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