def object_type(node, context=None):
try:<EOL><INDENT>types = set(_object_type(node, context))<EOL><DEDENT>except exceptions.InferenceError:<EOL><INDENT>return util.Uninferable<EOL><DEDENT>if len(types) > <NUM_LIT:1> or not types:<EOL><INDENT>return util.Uninferable<EOL><DEDENT>return list(types)[<NUM_LIT:0>]<EOL>
Obtain the type of the given node

    This is used to implement the ``type`` builtin, which means that it's
    used for inferring type calls, as well as used in a couple of other places
    in the inference.
    The node will be inferred first, so this function can support all
    sorts of objects, as long as they support inference.