def object_build(self, node, obj):
if obj in self._done:<EOL><INDENT>return self._done[obj]<EOL><DEDENT>self._done[obj] = node<EOL>for name in dir(obj):<EOL><INDENT>try:<EOL><INDENT>member = getattr(obj, name)<EOL><DEDENT>except AttributeError:<EOL><INDENT>attach_dummy_node(node, name)<EOL>continue<EOL><DEDENT>if inspect.ismethod(member):<EOL><INDENT>member = member.__func__<EOL><DEDENT>if inspect.isfunction(member):<EOL><INDENT>_build_from_function(node, name, member, self._module)<EOL><DEDENT>elif inspect.isbuiltin(member):<EOL><INDENT>if not _io_discrepancy(member) and self.imported_member(<EOL>node, member, name<EOL>):<EOL><INDENT>continue<EOL><DEDENT>object_build_methoddescriptor(node, member, name)<EOL><DEDENT>elif inspect.isclass(member):<EOL><INDENT>if self.imported_member(node, member, name):<EOL><INDENT>continue<EOL><DEDENT>if member in self._done:<EOL><INDENT>class_node = self._done[member]<EOL>if class_node not in node.locals.get(name, ()):<EOL><INDENT>node.add_local_node(class_node, name)<EOL><DEDENT><DEDENT>else:<EOL><INDENT>class_node = object_build_class(node, member, name)<EOL>self.object_build(class_node, member)<EOL><DEDENT>if name == "<STR_LIT>" and class_node.parent is None:<EOL><INDENT>class_node.parent = self._done[self._module]<EOL><DEDENT><DEDENT>elif inspect.ismethoddescriptor(member):<EOL><INDENT>assert isinstance(member, object)<EOL>object_build_methoddescriptor(node, member, name)<EOL><DEDENT>elif inspect.isdatadescriptor(member):<EOL><INDENT>assert isinstance(member, object)<EOL>object_build_datadescriptor(node, member, name)<EOL><DEDENT>elif isinstance(member, _CONSTANTS):<EOL><INDENT>attach_const_node(node, name, member)<EOL><DEDENT>elif inspect.isroutine(member):<EOL><INDENT>_build_from_function(node, name, member, self._module)<EOL><DEDENT>else:<EOL><INDENT>attach_dummy_node(node, name, member)<EOL><DEDENT><DEDENT>return None<EOL>
recursive method which create a partial ast from real objects
         (only function, class, and method are handled)