魔法属性
1. __doc__
- 表示类的描述信息

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

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

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

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

6. __dict__
- 类或对象中的所有属性
类的实例属性属于对象;类中的类属性和方法等属于类,即:

7. __str__
- 如果一个类中定义了__str__方法,那么在打印 对象 时,默认输出该方法的返回值。
8、__mro__
- Python 中针对 类 提供了一个 内置属性 __mro__ 可以查看方法搜索顺序
- MRO 是 method resolution order ,主要用于 在多继承时判断方法、属性 的调用路径

- 在搜索方法时,是按照 __mro__ 的输出结果 从左至右 的顺序查找的
- 如果在当前类中 找到方法,就直接执行,不再搜索
- 如果 没有找到,就查找下一个类 中是否有对应的方法,如果找到,就直接执行,不再搜索
- 如果找到最后一个类,还没有找到方法,程序报错
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 参数
