f'instance of it must be passed')
# raise an error if the metavar does not match the type
- if hasattr(self, "_get_formatter"):
- formatter = self._get_formatter()
+ if hasattr(self, "_get_validation_formatter"):
+ formatter = self._get_validation_formatter()
try:
formatter._format_args(action, None)
except TypeError:
action.container._remove_action(action)
def _check_help(self, action):
- if action.help and hasattr(self, "_get_formatter"):
- formatter = self._get_formatter()
+ if action.help and hasattr(self, "_get_validation_formatter"):
+ formatter = self._get_validation_formatter()
try:
formatter._expand_help(action)
except (ValueError, TypeError, KeyError) as exc:
self.suggest_on_error = suggest_on_error
self.color = color
+ # Cached formatter for validation (avoids repeated _set_color calls)
+ self._cached_formatter = None
+
add_group = self.add_argument_group
self._positionals = add_group(_('positional arguments'))
self._optionals = add_group(_('options'))
formatter._set_color(self.color)
return formatter
+ def _get_validation_formatter(self):
+ # Return cached formatter for read-only validation operations
+ # (_expand_help and _format_args). Avoids repeated slow _set_color calls.
+ if self._cached_formatter is None:
+ self._cached_formatter = self._get_formatter()
+ return self._cached_formatter
+
# =====================
# Help-printing methods
# =====================