def join(self, ToMerge, keycols=None, nullvals=None,<EOL>renamer=None, returnrenaming=False, selfname=None, Names=None):
if isinstance(ToMerge, np.ndarray):<EOL><INDENT>ToMerge = [ToMerge]<EOL><DEDENT>if isinstance(ToMerge, dict):<EOL><INDENT>assert selfname not in ToMerge.keys(),('<STR_LIT>', selfname + '<STR_LIT>'<EOL>'<STR_LIT>')<EOL>if selfname == None:<EOL><INDENT>try:<EOL><INDENT>selfname = self.name<EOL><DEDENT>except AttributeError:<EOL><INDENT>selfname = '<STR_LIT>'<EOL><DEDENT><DEDENT>ToMerge.update({selfname: self})<EOL><DEDENT>else:<EOL><INDENT>ToMerge = [self] + ToMerge<EOL><DEDENT>return tab_join(ToMerge, keycols=keycols, nullvals=nullvals,<EOL>renamer=renamer, returnrenaming=returnrenaming, Names=Names)<EOL>
Wrapper for spreadsheet.join, but handles coloring attributes.

The `selfname` argument allows naming of `self` to be used if `ToMerge` 
is a dictionary.

**See also:** :func:`tabular.spreadsheet.join`, :func:`tab_join`