From 662ed5c33db46d290ec19471be35b54277a8d30f Mon Sep 17 00:00:00 2001 From: Youqing Xiaozhua <843213558@qq.com> Date: Fri, 15 Aug 2025 07:38:23 +0000 Subject: [PATCH 1/2] [Fix] support overwrite by classes --- .pre-commit-config.yaml | 2 +- mmengine/config/config.py | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index c8edd013c6..dcded81c7e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -63,4 +63,4 @@ repos: ^examples | ^docs ) - additional_dependencies: ["types-setuptools", "types-requests", "types-PyYAML"] + additional_dependencies: ["setuptools", "types-setuptools", "types-requests", "types-PyYAML"] diff --git a/mmengine/config/config.py b/mmengine/config/config.py index 801243c82d..6621372bab 100644 --- a/mmengine/config/config.py +++ b/mmengine/config/config.py @@ -2,6 +2,7 @@ import ast import copy import difflib +import inspect import os import os.path as osp import platform @@ -53,6 +54,11 @@ def _lazy2string(cfg_dict, dict_type=None): return type(cfg_dict)(_lazy2string(v, dict_type) for v in cfg_dict) elif isinstance(cfg_dict, (LazyAttr, LazyObject)): return f'{cfg_dict.module}.{str(cfg_dict)}' + elif (inspect.isclass(cfg_dict) and hasattr(cfg_dict, '__module__') + and hasattr(cfg_dict, '__name__') + and cfg_dict.__module__ != 'builtins'): + # Handle regular class objects by converting to module path string + return f'{cfg_dict.__module__}.{cfg_dict.__name__}' else: return cfg_dict From 84e9c398d272af90f219eeec6b9b944646e537fd Mon Sep 17 00:00:00 2001 From: Youqing Xiaozhua <843213558@qq.com> Date: Fri, 15 Aug 2025 07:48:16 +0000 Subject: [PATCH 2/2] [fix] also support overwrite function --- mmengine/config/config.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mmengine/config/config.py b/mmengine/config/config.py index 6621372bab..b242a37c0b 100644 --- a/mmengine/config/config.py +++ b/mmengine/config/config.py @@ -54,11 +54,12 @@ def _lazy2string(cfg_dict, dict_type=None): return type(cfg_dict)(_lazy2string(v, dict_type) for v in cfg_dict) elif isinstance(cfg_dict, (LazyAttr, LazyObject)): return f'{cfg_dict.module}.{str(cfg_dict)}' - elif (inspect.isclass(cfg_dict) and hasattr(cfg_dict, '__module__') + elif ((inspect.isclass(cfg_dict) or inspect.isfunction(cfg_dict)) + and hasattr(cfg_dict, '__module__') and hasattr(cfg_dict, '__name__') and cfg_dict.__module__ != 'builtins'): # Handle regular class objects by converting to module path string - return f'{cfg_dict.__module__}.{cfg_dict.__name__}' + return f"{cfg_dict.__module__}.{cfg_dict.__name__}" else: return cfg_dict