All immutable new classes use a hack to make sure the post-init cleanup occurs.

def _imm_new(cls):
    '''
    All immutable new classes use a hack to make sure the post-init cleanup occurs.
    '''
    imm = object.__new__(cls)
    # Note that right now imm has a normal setattr method;
    # Give any parameter that has one a default value
    params = cls._pimms_immutable_data_['params']
    for (p,dat) in six.iteritems(params):
        dat = dat[0]
        if dat: object.__setattr__(imm, p, dat[0])
    # Clear any values; they are not allowed yet
    _imm_clear(imm)
    # Note that we are initializing...
    dd = object.__getattribute__(imm, '__dict__')
    dd['_pimms_immutable_is_init'] = True
    # That should do it!
    return imm