- 在 python 中,我们把类自带的以双下划线开头以及结尾的方法就是魔法方法
- 一般的话我们的这些 魔法方法是不用手动调度的,一般的都是在满足特定的条件后就可以实现调度了
- 通过魔法方法,我们是可以实现的是控制类的行为,实现对类的高级的控制
- 这个就是我们的 构造函数 的方法
- 当我们实现类的实例化的时候直接自动的调度
- 一般用于实现的是进行类的实例属性的初始化的操作
- 我们可以实现的是对我们的类进行添加一些默认的行为的调度
- 这个类的话就是实现的是我们的 析构函数 的书写
- 其实现调度的时间是我们的在类进行执行完的时候,直接实现调度即可
- 一般用于实现的是我们的对类进行回收,避免了内存空间的占用
- 定制对象的显示规则
- 可以实现的是定制我们的打印类的时候,我们类的打印的信息设置
- 负责的是创建类的实例
__init__实现的是实例化__init__被调用的时机是在__new__之后的
- 该方法实现的是对我们的属性进行管理的一种方法
- 可以实现的是查看对象的方法以及属性的名称
- 在创建了实例化对象后,我们就可以使用
dir()方法来调度
- 当该方法作用域类的时候,存储所有实例共享的变量和函数
- 当作用于对象的时候,存储的是所有的对象所有的属性和值
- 一般用于动态的读取和设置对象的属性
- 访问对象的时候自动的调度
__getattr__(self, xxx)访问对象的xxx属性且属性不存在的时候被调度__setattr__(self, xxx)设置对象属性值的时候,被自动的调度__delattr__(self, xxx)删除对象的某某属性的时候,自动的被调度
-
通过字符串的形式来实现在程序运行的时候动态的修改程序的变量,方法,属性的操作
-
反射的操作中所有的修改都是在内存中进行的,所以说不会修改实际的代码
-
主要的目的就是提高代码在运行时的灵活性
-
getattr获取某方法或者某属性 -
hasattr判断是否具有某方法或者某属性 -
setattr动态的添加一个方法或者属性 -
delattr动态的删除一个方法或者属性
下面的两个方法,实现的是将我们的 字符串解析为 Python 代码实现运行
evalexec