toggle hide/unhide parent and children objects at once similarly to the outliner Shift+LMB function Is it possible to simulate the Shift+LMB for hiding a parent object with its children as in the outliner. Now based on this and this I am iterating over the children objects and hide_set(True) them individually:
def toggle_hide (list, mode=True):

    children_list = []    
    for obj in list:
        if obj.children:
            children_list.append(obj.children)

        obj.hide_set(mode)

    if children_list:
        for child in children_list:

            toggle_hide (child)

bpy.data.objects[&quot;parent&quot;].hide_set(True)
toggle_hide(bpy.data.objects[&quot;parent&quot;].children)

bpy.data.objects[&quot;parent&quot;].hide_set(True) hides only the parent object leaving the children unhidden, which I need to do it afterwards recursively.
My guess is that under the hood might be the same procedure that is happening but I was wondering if someone can just call the corresponding outliner build in function instead of re-implementing it or by passing some flag to the hide_set() though as I see it takes only a view_layer id.

Update (not working):
Now I want to add the solution from @batFINGER to a class, e.g.
import bpy
from bpy.props import BoolProperty

class Utility:

    class AddHidingProperty:
        def __init__(self):
            bpy.types.Object.hide_children = BoolProperty(update=self.hide_children)
            
            bpy.types.TEXT_HT_footer.append(self.draw)
        
        def hide_children(self, obj, context):
            obj.hide_set(obj.hide_children)
            for o in obj.children:
                o.hide_children = obj.hide_children
        
        # function to draw the checkbox in the editor footer      
        def draw(self, obj, context):
            layout = obj.layout
            ob = context.object
            layout.prop(ob, &quot;hide_children&quot;)

However when I call the Utility.AddHidingProperty(), this gives me the following error: ValueError: bpy_struct &quot;Object&quot; registration error: hide_children could not register.

Update 2 (working):
The following seems to work but I am not sure whether it is a good approach:
class Utility:

    class AddHidingProperty:

        def __init__(self):
            
            def hide_children(obj, context):
                obj.hide_set(obj.hide_children)
                for o in obj.children:
                    o.hide_children = obj.hide_children
                    
            # function to draw the checkbox in the editor footer      
            def draw(obj, context):
                layout = obj.layout
                ob = context.object
                layout.prop(ob, &quot;hide_children&quot;)
                
            bpy.types.Object.hide_children = BoolProperty(update=hide_children)
            
            bpy.types.TEXT_HT_footer.append(draw)
Define and toggle a boolean property
From the other answer to link https://blender.stackexchange.com/a/147144/15543 it gives the object a hide_children property that if set hides the object and sets hide_children hence setting recursively for all children.
A checkbox to set the property is added to the text editor footer for testing.
import bpy
from bpy.props import BoolProperty


def hide_children(self, context):
    self.hide_set(self.hide_children)
    for o in self.children:
        o.hide_children = self.hide_children


bpy.types.Object.hide_children = BoolProperty(update=hide_children)


def draw(self, context):
    layout = self.layout
    ob = context.object
    layout.prop(ob, &quot;hide_children&quot;)


bpy.types.TEXT_HT_footer.append(draw)

Since the object can be found from context, can toggle the boolean value of the property using the window managers context toggle operator
After you have run the script above to register the property on the Object class
&gt;&gt;&gt; C.object.hide_children
False

&gt;&gt;&gt; C.object.hide_children = True

&gt;&gt;&gt; bpy.ops.wm.context_toggle(
context_toggle()
bpy.ops.wm.context_toggle(data_path=&quot;&quot;, module=&quot;&quot;)
Toggle a context value
&gt;&gt;&gt; bpy.ops.wm.context_toggle(data_path=&quot;object.hide_children&quot;)
{'FINISHED'}

If You do not run the script beforehand will get an error
# same as not running script (unregister the property)
&gt;&gt;&gt; del bpy.types.Object.hide_children 
&gt;&gt;&gt; bpy.ops.wm.context_toggle(data_path=&quot;object.hide_children&quot;)
context_path_validate error: context.object.hide_children not found (invalid keymap entry?)
{'PASS_THROUGH'}

Assign a shortcut.
With the script above run, and the property defined  can be set as a shortcut from context.

Image of Edit &gt; User Preferences &gt; Keymaps
Since once hidden an object cannot have context, and from the 3d view there is no way to select as a group AltH will unhide all previously hidden objects.
Note both the object (self) and context is passed to the update method could instead hide all objects and their children looping over context.selected_objects