Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

README.md

魔法方法 magic method

基本的概念

  • 在 python 中,我们把类自带的以双下划线开头以及结尾的方法就是魔法方法
  • 一般的话我们的这些 魔法方法是不用手动调度的,一般的都是在满足特定的条件后就可以实现调度了
  • 通过魔法方法,我们是可以实现的是控制类的行为,实现对类的高级的控制

魔法方法一 __init__

  • 这个就是我们的 构造函数 的方法
  • 当我们实现类的实例化的时候直接自动的调度
  • 一般用于实现的是进行类的实例属性的初始化的操作
  • 我们可以实现的是对我们的类进行添加一些默认的行为的调度

魔法方法二 __del__

  • 这个类的话就是实现的是我们的 析构函数 的书写
  • 其实现调度的时间是我们的在类进行执行完的时候,直接实现调度即可
  • 一般用于实现的是我们的对类进行回收,避免了内存空间的占用

魔法方法三 __repr__

  • 定制对象的显示规则
  • 可以实现的是定制我们的打印类的时候,我们类的打印的信息设置

魔法方法四 __new__

  • 负责的是创建类的实例
  • __init__ 实现的是实例化
  • __init__ 被调用的时机是在 __new__ 之后的

魔法方法五 __dir__

  • 该方法实现的是对我们的属性进行管理的一种方法
  • 可以实现的是查看对象的方法以及属性的名称
  • 在创建了实例化对象后,我们就可以使用 dir() 方法来调度

魔法方法六 __dict__

  • 当该方法作用域类的时候,存储所有实例共享的变量和函数
  • 当作用于对象的时候,存储的是所有的对象所有的属性和值
  • 一般用于动态的读取和设置对象的属性

魔法方法七 __getattribute__(self, xxx)

  • 访问对象的时候自动的调度
  • __getattr__(self, xxx) 访问对象的xxx属性且属性不存在的时候被调度
  • __setattr__(self, xxx) 设置对象属性值的时候,被自动的调度
  • __delattr__(self, xxx) 删除对象的某某属性的时候,自动的被调度

魔法方法八 反射

  • 通过字符串的形式来实现在程序运行的时候动态的修改程序的变量,方法,属性的操作

  • 反射的操作中所有的修改都是在内存中进行的,所以说不会修改实际的代码

  • 主要的目的就是提高代码在运行时的灵活性

  • getattr 获取某方法或者某属性

  • hasattr 判断是否具有某方法或者某属性

  • setattr 动态的添加一个方法或者属性

  • delattr 动态的删除一个方法或者属性

下面的两个方法,实现的是将我们的 字符串解析为 Python 代码实现运行

  • eval
  • exec