2026-10-19 15:06:52
Python中的反射是一种强大的机制,允许程序在运行时动态地检查、访问和操作对象的属性或方法。以下是关于反射的详细说明:
反射的核心功能动态属性访问通过字符串名称获取/设置/删除对象的属性或方法,无需在代码中硬编码属性名。
getattr(obj, 'name'):获取属性值
setattr(obj, 'name', value):设置属性值
delattr(obj, 'name'):删除属性
方法调用获取方法后需加括号执行:
method = getattr(obj, 'method_name')method() # 实际调用存在性检查配合hasattr()避免直接访问不存在的属性导致异常:
if hasattr(obj, 'attr_name'): value = getattr(obj, 'attr_name')插件系统通过配置字符串动态加载模块或调用方法:
plugin_name = "user_plugin"plugin_class = getattr(import_module(plugin_name), "Plugin")plugin_instance = plugin_class()框架路由Web框架(如Django)根据URL字符串映射到控制器方法:
controller = getattr(sys.modules[__name__], "UserController")action = getattr(controller(), "list_users")response = action()动态配置根据用户输入或配置文件调整对象行为:
settings = {"output": "json"}if hasattr(obj, f"output_{settings['output']}"): formatter = getattr(obj, f"output_{settings['output']}")模块自省检查或调用当前模块的成员:
current_module = sys.modules[__name__]if hasattr(current_module, "helper_function"): helper = getattr(current_module, "helper_function")反射的核心优势在于将字符串与代码逻辑解耦,特别适合需要高度灵活性的场景(如框架设计),但需谨慎使用以确保安全性和清晰性。