diff --git a/jsonargparse/typehints.py b/jsonargparse/typehints.py
index b163825..e4f1d2d 100644
--- a/jsonargparse/typehints.py
+++ b/jsonargparse/typehints.py
@@ -235,8 +235,12 @@ class ActionTypeHint(Action):
 
 
     @staticmethod
-    def is_callable_typehint(typehint):
+    def is_callable_typehint(typehint, all_subtypes=True):
         typehint_origin = get_typehint_origin(typehint)
+        if typehint_origin == Union:
+            subtypes = [a for a in typehint.__args__ if a != NoneType]
+            test = all if all_subtypes else any
+            return test(ActionTypeHint.is_callable_typehint(s) for s in subtypes)
         return typehint_origin in callable_origin_types or typehint in callable_origin_types
 
 
@@ -267,7 +271,7 @@ class ActionTypeHint(Action):
         typehint = typehint_from_action(action)
         if typehint and (
             ActionTypeHint.is_subclass_typehint(typehint, all_subtypes=False) or
-            ActionTypeHint.is_callable_typehint(typehint) or
+            ActionTypeHint.is_callable_typehint(typehint, all_subtypes=False) or
             ActionTypeHint.is_mapping_typehint(typehint)
         ):
             return action, arg_base, explicit_arg

diff --git a/jsonargparse_tests/test_typehints.py b/jsonargparse_tests/test_typehints.py
index af135f0..7d31c88 100755
--- a/jsonargparse_tests/test_typehints.py
+++ b/jsonargparse_tests/test_typehints.py
@@ -497,6 +497,24 @@ class TypeHintsTests(unittest.TestCase):
             self.assertEqual(init.call(), 'Bob')
 
 
+    def test_union_callable_with_class_path_short_init_args(self):
+        class MyCallable:
+            def __init__(self, name: str):
+                self.name = name
+            def __call__(self):
+                return self.name
+
+        parser = ArgumentParser()
+        parser.add_argument('--call', type=Union[Callable, None])
+
+        with mock_module(MyCallable) as module:
+            cfg = parser.parse_args([f'--call={module}.MyCallable', '--call.name=Bob'])
+            self.assertEqual(cfg.call.class_path, f'{module}.MyCallable')
+            self.assertEqual(cfg.call.init_args, Namespace(name='Bob'))
+            init = parser.instantiate_classes(cfg)
+            self.assertEqual(init.call(), 'Bob')
+
+
     def test_typed_Callable_with_function_path(self):
         def my_func_1(p: int) -> str:
             return str(p)

Cannot override Callable init_args without passing the class_path
## 🐛 Bug report

Unlike the class argument, I cannot override `Callable` argument without passing the class_path even it is given previously.

### To reproduce

```python
from jsonargparse import CLI
from typing import Callable

def call():
    print("Hi")

class Call:
    def __init__(self, name: str):
        self.name = name

    def __call__(self):
        print(f"Hi, {self.name}")

def fn(
    callable: Callable = call,
):
    callable()

if __name__ == "__main__":
    CLI(fn)
```

```yaml
callable:
  class_path: __main__.Call
  init_args:
    name: Alice
```

```console
python test.py --config test.yaml
Hi, Alice
python test.py --config test.yaml --callable.name Bob
usage: test.py [-h] [--config CONFIG] [--print_config [={comments,skip_null,skip_default}+]] [--callable CALLABLE]
test.py: error: Unrecognized arguments: --callable.name Bob
```

### Expected behavior

```console
python test.py --config test.yaml
Hi, Alice
python test.py --config test.yaml --callable.name Bob
Hi, Bob
```

### Environment

- jsonargparse version: 4.15.1
- Python version: 3.9
- How jsonargparse was installed: `pip install jsonargparse`
- OS (e.g., Linux): macOS & Linux

jsonargparse_tests/test_typehints.py::TypeHintsTests::test_union_callable_with_class_path_short_init_args
jsonargparse_tests/test_typehints.py::TypeHintsTests::test_Callable_with_class_path jsonargparse_tests/test_typehints.py::TypeHintsTests::test_Callable_with_function_path jsonargparse_tests/test_typehints.py::TypeHintsTests::test_Literal jsonargparse_tests/test_typehints.py::TypeHintsTests::test_add_argument_type_hint jsonargparse_tests/test_typehints.py::TypeHintsTests::test_bool jsonargparse_tests/test_typehints.py::TypeHintsTests::test_callable_with_class_path_short_init_args jsonargparse_tests/test_typehints.py::TypeHintsTests::test_class_type jsonargparse_tests/test_typehints.py::TypeHintsTests::test_class_type_config_merge_init_args jsonargparse_tests/test_typehints.py::TypeHintsTests::test_class_type_dict_default_nested_init_args jsonargparse_tests/test_typehints.py::TypeHintsTests::test_class_type_in_union_with_str jsonargparse_tests/test_typehints.py::TypeHintsTests::test_class_type_invalid_class_name_then_init_args jsonargparse_tests/test_typehints.py::TypeHintsTests::test_class_type_required_params jsonargparse_tests/test_typehints.py::TypeHintsTests::test_class_type_set_defaults_class_name jsonargparse_tests/test_typehints.py::TypeHintsTests::test_class_type_subclass_given_by_name_issue_84 jsonargparse_tests/test_typehints.py::TypeHintsTests::test_class_type_subclass_in_union_help jsonargparse_tests/test_typehints.py::TypeHintsTests::test_class_type_subclass_nested_help jsonargparse_tests/test_typehints.py::TypeHintsTests::test_class_type_subclass_nested_init_args jsonargparse_tests/test_typehints.py::TypeHintsTests::test_class_type_subclass_short_init_args jsonargparse_tests/test_typehints.py::TypeHintsTests::test_class_type_unresolved_name_clash jsonargparse_tests/test_typehints.py::TypeHintsTests::test_class_type_unresolved_parameters jsonargparse_tests/test_typehints.py::TypeHintsTests::test_class_type_without_defaults jsonargparse_tests/test_typehints.py::TypeHintsTests::test_complex_number jsonargparse_tests/test_typehints.py::TypeHintsTests::test_dict jsonargparse_tests/test_typehints.py::TypeHintsTests::test_dict_items jsonargparse_tests/test_typehints.py::TypeHintsTests::test_dict_union jsonargparse_tests/test_typehints.py::TypeHintsTests::test_dump_skip_default jsonargparse_tests/test_typehints.py::TypeHintsTests::test_enum jsonargparse_tests/test_typehints.py::TypeHintsTests::test_help_known_subclasses_class jsonargparse_tests/test_typehints.py::TypeHintsTests::test_help_known_subclasses_type jsonargparse_tests/test_typehints.py::TypeHintsTests::test_init_args_without_class_path jsonargparse_tests/test_typehints.py::TypeHintsTests::test_invalid_init_args_in_yaml jsonargparse_tests/test_typehints.py::TypeHintsTests::test_lazy_instance_invalid_kwargs jsonargparse_tests/test_typehints.py::TypeHintsTests::test_list jsonargparse_tests/test_typehints.py::TypeHintsTests::test_list_append jsonargparse_tests/test_typehints.py::TypeHintsTests::test_list_append_config jsonargparse_tests/test_typehints.py::TypeHintsTests::test_list_append_subclass_init_args jsonargparse_tests/test_typehints.py::TypeHintsTests::test_list_append_subcommand_subclass jsonargparse_tests/test_typehints.py::TypeHintsTests::test_list_enum jsonargparse_tests/test_typehints.py::TypeHintsTests::test_list_str_positional jsonargparse_tests/test_typehints.py::TypeHintsTests::test_list_tuple jsonargparse_tests/test_typehints.py::TypeHintsTests::test_list_union jsonargparse_tests/test_typehints.py::TypeHintsTests::test_nargs_questionmark jsonargparse_tests/test_typehints.py::TypeHintsTests::test_nested_mapping_without_args jsonargparse_tests/test_typehints.py::TypeHintsTests::test_nested_tuples jsonargparse_tests/test_typehints.py::TypeHintsTests::test_no_str_strip jsonargparse_tests/test_typehints.py::TypeHintsTests::test_register_type jsonargparse_tests/test_typehints.py::TypeHintsTests::test_restricted_number_type jsonargparse_tests/test_typehints.py::TypeHintsTests::test_str_not_timestamp_issue_135 jsonargparse_tests/test_typehints.py::TypeHintsTests::test_tuple jsonargparse_tests/test_typehints.py::TypeHintsTests::test_tuple_ellipsis jsonargparse_tests/test_typehints.py::TypeHintsTests::test_tuple_untyped jsonargparse_tests/test_typehints.py::TypeHintsTests::test_type_Any jsonargparse_tests/test_typehints.py::TypeHintsTests::test_type_hint_action_failure jsonargparse_tests/test_typehints.py::TypeHintsTests::test_typed_Callable_with_function_path jsonargparse_tests/test_typehints.py::TypeHintsTests::test_typehint_Type jsonargparse_tests/test_typehints.py::TypeHintsTests::test_typehint_non_parameterized_type jsonargparse_tests/test_typehints.py::TypeHintsTests::test_typehint_parametrized_type jsonargparse_tests/test_typehints.py::TypeHintsTests::test_typehint_serialize_enum jsonargparse_tests/test_typehints.py::TypeHintsTests::test_typehint_serialize_list jsonargparse_tests/test_typehints.py::TypeHintsTests::test_union_partially_unsupported_type jsonargparse_tests/test_typehints.py::TypeHintsTests::test_unsupported_type jsonargparse_tests/test_typehints.py::TypeHintsTests::test_uuid jsonargparse_tests/test_typehints.py::TypeHintsTmpdirTests::test_class_path_override_config_with_defaults jsonargparse_tests/test_typehints.py::TypeHintsTmpdirTests::test_class_path_override_with_default_config_files jsonargparse_tests/test_typehints.py::TypeHintsTmpdirTests::test_class_type_with_default_config_files jsonargparse_tests/test_typehints.py::TypeHintsTmpdirTests::test_default_path_unregistered_type jsonargparse_tests/test_typehints.py::TypeHintsTmpdirTests::test_enable_path jsonargparse_tests/test_typehints.py::TypeHintsTmpdirTests::test_list_append_default_config_files jsonargparse_tests/test_typehints.py::TypeHintsTmpdirTests::test_list_append_default_config_files_subcommand jsonargparse_tests/test_typehints.py::TypeHintsTmpdirTests::test_list_path jsonargparse_tests/test_typehints.py::TypeHintsTmpdirTests::test_mapping_class_typehint jsonargparse_tests/test_typehints.py::TypeHintsTmpdirTests::test_optional_path jsonargparse_tests/test_typehints.py::TypeHintsTmpdirTests::test_path jsonargparse_tests/test_typehints.py::TypeHintsTmpdirTests::test_path_like_within_subclass jsonargparse_tests/test_typehints.py::TypeHintsTmpdirTests::test_subcommand_with_subclass_default_override_lightning_issue_10859 jsonargparse_tests/test_typehints.py::OtherTests::test_is_optional