Happy 发表于 2025-6-16 22:53

反射的使用

静态调用属性/方法概念
      运行前如果要调用类的属性或者方法,需要先实例化它的对象


动态调用属性/方法概念
      运行时就获取类的属性或者方法,甚至添加、修改它的属性或者方法
      (1)给类或对象动态的添加属性或者方法
            setattr(x, y, v)
                     x:需要添加属性或方法的类或对象
                     y:需要添加的属性名或方法名
                     v:属性名或方法名的值
            给类的对象动态添加属性
               使用这个对象来调用这个属性

               使用同一个类的另一个对象调用之前给类的对象动态添加的属性

               使用类名直接调用给对象动态添加的属性

            给类动态添加属性
               使用这个类来调用这个属性

               使用这个类的对象来调用这个属性

      (2)获取类或对象动态添加的属性值
            getattr(object, name, default=None)
                     object:获取值的目标(一般为类名或对象名)
                     name:获取哪个属性的值
                     default:保持默认值(None)就好
            目标属性是类属性的,就使用类名或该类的对象的对象名来获取属性值;
            目标属性是对象属性的,就使用该对象名来获取属性值(其他对象名或类名都不能获取)。

      (3)判断类或对象是否有该属性
            判断当前类或对象里是否有该属性,返回布尔值(True为有该属性,False为没有该属性)
                  使用“hasattr”函数判断类里是否有该属性

                  使用“hasattr”函数判断对象里是否有该属性

      (4)删除类或对象里的属性
                  使用“delattr”函数删除类里的属性

                  使用“delattr”函数删除对象里的属性


页: [1]
查看完整版本: 反射的使用