def __init__()

in mujoco_worldgen/objs/obj.py [0:0]


    def __init__(self):
        self.place_boxes = place_boxes  # allow user to override (expensive) default placement
        # ####################
        # ### First Phase ####
        # ####################
        # Create a tree of all the objects.
        # Invoked functions :
        #  - append (appends an element to the tree
        #  - mark (marks an element ; adds site in xml)
        #  - add_transform (adds posprocessing transform function).
        # Nothing has to be overrided in subclasses.

        # Determined by append
        self.children = OrderedDict()  # indexed by placement name
        # Determined by mark
        self.markers = []
        # Determined by add_transform
        self.transforms = []

        # #####################
        # ### Second Phase ####
        # #####################
        # Compute name for every element in the tree.
        # Invoked functions:
        #  - generate_name (non recursive function. Can be overriden).
        #  - to_names (recursive function)


        # ####################
        # ### Third Phase ####
        # ####################
        # Determine sizes and relative positions of objects.
        # Inoveked functions:
        #  - compile
        #  - place
        #  - generate
        self.size = None  #
        self.placements = None  # List of placements
        # Each placement is a dict {"origin": (x,y,z), "size": (x,y,z)}

        # Determined by place.
        self.relative_position = None  # (X, Y) position relative to parent

        # ###################
        # ### Four Phase ####
        # ###################
        # Determines absolute positions of generated objects.
        # Invoked functions :
        #  - set_absolute_position
        # (X, Y, Z) position in absolute (world) frame
        self.absolute_position = None

        # ####################
        # ### Fifth Phase ####
        # ####################
        # Generates xml and initial state in the simulator.
        # Invoked functions:
        #  - to_xml_dict
        #  - generate_xinit
        #  - to_xinit
        #  - generate_xml_dict

        # Checks that only allowed functions are overriden in subclasses.
        if self.__class__.__name__ != "WorldBuilder":
            for key, func in Obj.__dict__.items():
                if hasattr(func, "__call__") and key in self.__class__.__dict__:
                    assert key in ["__init__", "append", "mark", "generate_name",
                                   "generate", "generate_xinit", "generate_xml_dict"], \
                        ("Subclass %s overrides final function :%s. " % (self.__class__, key)) + \
                        "Please don't override it."
        # Extra fields
        # ============
        # Material to set on the object.
        self._material = None
        # if False object has base joints, and it's movable,
        # otherwise object is static.
        self._keep_slide_joint = [True for _ in range(3)]
        self._keep_hinge_joint = [True for _ in range(3)]