魔法属性 - jerry

Welcome to Aiiyx !

魔法属性

1. __doc__

  1. 表示类的描述信息

2. __module__ 和 __class__

  1. __module__ 表示当前操作的对象在哪个模块
  2. __class__ 表示当前操作的对象的类是什么

3. __init__

  1. 初始化方法,通过类创建对象时,自动触发执行

4. __del__

  1. 当对象在内存中被释放时,自动触发执行

注:此方法一般无须定义,因为Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行,所以,__del__的调用是由解释器在进行垃圾回收时自动触发执行的。

5. __call__

  1. 对象后面加括号,触发执行。

注:__init__方法的执行是由创建对象触发的,即:对象=类名() ;而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象()或者类()()

6. __dict__

  1. 类或对象中的所有属性

类的实例属性属于对象;类中的类属性和方法等属于类,即:

7. __str__

  1. 如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值。

8、__mro__

  • Python 中针对 提供了一个 内置属性 __mro__ 可以查看方法搜索顺序
  • MRO 是 method resolution order ,主要用于 在多继承时判断方法、属性 的调用路径
  1. 在搜索方法时,是按照 __mro__ 的输出结果 从左至右 的顺序查找的
  2. 如果在当前类中 找到方法,就直接执行,不再搜索
  3. 如果 没有找到,就查找下一个类 中是否有对应的方法,如果找到,就直接执行,不再搜索
  4. 如果找到最后一个类,还没有找到方法,程序报错

9、__new__

<1> 类名() 创建对象,创建对象 的动作有两步:

  • 1) 调用 __new__ 方法为对象 分配空间 在内存中为对象 分配空间
  • 2) 调用初始化方法 __init__ 为 对象初始化

<2> __new__ 是一个 由 object 基类提供的 内置的静态方法,也就是说是基类的方法,所以需要传cls.主要作用有两个:

  • 1) 在内存中为对象 分配空间
  • 2) 返回 对象的引用
  • 3) object将__new__()方法定义为静态方法,并且至少需要传递一个参数cls,cls表示需要实例化的类,此参数在实例化时由Python解释器自动提供。

<3> Python 的解释器获得对象的 引用 后,将引用作为 第一个参数self,传递给 __init__ 方法

重写__new__() 方法 的代码非常固定!

  • 重写 __new__() 方法 一定要 return super().__new__(cls)
  • 否则 Python 的解释器 得不到 分配了空间的 对象引用就不会调用对象的初始化方法
  • 注意: __new__ 是一个静态方法,在调用时需要 主动传递 cls 参数
分享