python的魔法方法

https://ceshiren.com/t/topic/28401

魔法函数是python内置函数,可以重写但是不能自定义。

特点: 以双下划线(xx )开始和结束的函数

作用: 魔法函数可以为我们写的类增加一些额外功能

举例: 如果不重写系统就会使用Python预先定义好的逻辑,如果重新就会实现我们自己需要的逻辑,就像构造方法__init__ ,如果不重写在实例化的时候也会去调用,但是是不接收任何参数的构造方法,如果想要接收参数那我们就需要去重写这个方法。

常用的魔法方法分类:

1.构造函数 __init__

个对象初始化的行为,事实上,第一个被调用的是 __new__ ,这个 方法才真正地创建了实例。当这个对象的生命周期结束的时候, __del__ 会被调用。

2.操作符

(1)比较操作符
(2)数值操作符

3.类的表示

(1)__dir__(self)
定义对类的实例调用 dir() 时的行为,这个方法应该向调用者返回一个属性列表。一般来说,没必要自己实现 __dir__ 。但是如果你重定义了 __getattr__ 或者 __getattribute__ (下个部分会介绍),乃至使用动态生成的属性,以实现类的交互式使用,那么这个魔法方法是必不可少的。
(2)__dict__(self)
类或对象的属性及方法都放在这里;

  • 类的静态函数、类函数、普通函数、全局变量以及一些内置的属性都是放在类__dict__ 里;
  • 对象的__dict__ 中存储了一些self.xxx的一些东西;

(3) __name__:当前程序运行的模块名, 如果py文件作为模块被导入(import),那么__name__就是该py文件的文件名(也称 模块名),每一个py文件都有一个属于自己的__name__

(4) __main__:实际上就是一个字符串,用来鉴别程序入口,没有太多花里胡哨的东西.
__name__和__main__的说明

4.访问控制

很多从其他语言转向Python的人都抱怨Python的类缺少真正意义上的封装(即没办法定义私有属性然后使用公有的getter和setter)。然而事实并非如此。实际上Python不是通过显式定义的字段和方法修改器,而是通过魔法方法实现了一系列的封装。