human
Here's a good function header given the following:
I wrote the below code

    mgr = MemoizedUserRelManager(name, relation, permission_class, disable_ids_fn, disable_reverse_ids_fn)
    class UR:
        @classmethod
        def _bind(cls, fn):
            return types.UnboundMethodType(fn, None, cls)
    setattr(UR, ('is_' + name), UR._bind(mgr.get))
    setattr(UR, ('get_' + name), UR._bind(mgr.get))
    setattr(UR, ('add_' + name), UR._bind(mgr.add))
    setattr(UR, ('remove_' + name), UR._bind(mgr.remove))
    setattr(UR, ('each_' + name), UR._bind(mgr.by_thing))
    setattr(UR, (name + '_permission_class'), permission_class)
    if (not disable_ids_fn):
        setattr(UR, mgr.ids_fn_name, UR._bind(mgr.ids))
    if (not disable_reverse_ids_fn):
        setattr(UR, mgr.reverse_ids_fn_name, staticmethod(mgr.reverse_ids))
    return UR

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

def UserRel(name, relation, disable_ids_fn=False, disable_reverse_ids_fn=False, permission_class=None):