human
I wrote the below code

    nargs = len(attribute_names)
    class supertup(tuple, ):
        __slots__ = ()
        def __new__(cls, *args):
            if (len(args) != nargs):
                raise TypeError, ('%s    takes    %d    args    (%d    given)' % (typename, nargs, len(args)))
            return tuple.__new__(cls, args)
        def __repr__(self):
            return ('%s(%s)' % (typename, ',    '.join(map(repr, self))))
        def __eq__(self, other):
            if (hasattr(self, 'name') and hasattr(other, 'name')):
                if (self.name.upper() == other.name.upper()):
                    return True
                else:
                    return False
            else:
                return tuple.__eq__(self, other)
    for (index, attr_name) in enumerate(attribute_names):
        setattr(supertup, attr_name, property(itemgetter(index)))
    supertup.__name__ = typename
    return supertup

What's a good function header?
assistant
#Here's a good function header.

def superTuple(typename, *attribute_names):