'Return `(members_check_module, members)` where `members` is a
list of `(membername, member)` pairs of the members of *self.object*.
If *want_all* is True, return all members.  Else, only return those
members given by *self.options.members* (which may also be none).'

def get_object_members(self, want_all):

    analyzed_member_names = set()
    if self.analyzer:
        attr_docs = self.analyzer.find_attr_docs()
        namespace = '.'.join(self.objpath)
        for item in iteritems(attr_docs):
            if (item[0][0] == namespace):
                analyzed_member_names.add(item[0][1])
    if (not want_all):
        if (not self.options.members):
            return (False, [])
        members = []
        for mname in self.options.members:
            try:
                members.append((mname, self.get_attr(self.object, mname)))
            except AttributeError:
                if (mname not in analyzed_member_names):
                    self.directive.warn(('missing    attribute    %s    in    object    %s' % (mname, self.fullname)))
    elif self.options.inherited_members:
        members = safe_getmembers(self.object, attr_getter=self.get_attr)
    else:
        try:
            obj_dict = self.get_attr(self.object, '__dict__')
        except AttributeError:
            members = []
        else:
            members = [(mname, self.get_attr(self.object, mname, None)) for mname in list(iterkeys(obj_dict))]
        if isenumclass(self.object):
            members.extend((item for item in self.object.__members__.items() if (item not in members)))
    membernames = set((m[0] for m in members))
    for aname in analyzed_member_names:
        if ((aname not in membernames) and (want_all or (aname in self.options.members))):
            members.append((aname, INSTANCEATTR))
    return (False, sorted(members))
