diff --git a/02.面向对象/06.反射与双下方法.md b/02.面向对象/06.反射与双下方法.md index 32c10ca..05d61c3 100644 --- a/02.面向对象/06.反射与双下方法.md +++ b/02.面向对象/06.反射与双下方法.md @@ -2,7 +2,13 @@ ## 反射 -python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射) +- python面向对象中的反射: + - 指程序在**运行时**动态地获取对象(包括类、模块、实例等)的结构信息(如属性、方法、类型),并能动态地操作这些结构(如调用方法、修改属性、创建对象)的能力。简单来说,反射让程序能在运行时“自省”——了解自身的组成,并根据需要灵活调整行为。 +- 反射的常见应用场景 + - **动态配置加载**:根据配置文件(如JSON、YAML)动态设置对象属性。例如,通过`setattr`将配置中的`debug=True`映射到对象的`debug`属性。 + - **插件化架构**:通过`importlib.import_module`动态加载插件模块,再用`getattr`获取插件类的实例并调用其方法。例如,电商系统可动态加载“限时抢购”“团购”等插件订单类。 + - **通用工具函数**:编写适用于不同对象的通用工具。例如,`print_object_info`函数通过`dir`获取对象所有属性,再用`getattr`打印属性值。 + - **ORM框架**:通过反射将数据库表的列映射到Python类的属性。例如,Django ORM通过反射获取模型的字段信息,动态生成SQL语句。 四个可以实现自省的函数