def type_assert(exp, self):
    """
    exp 会做偏函数, 所以对象会被绑定在第二个参数上
    """
    actual = type(self._val)
    res = actual is exp
    msg_format = '{0} should be {1}'.format
    self._assert(res, msg_format(actual, exp))
    return self
