python知识点范围:magic method魔术方法

  • magic method魔术方法是前后有两个下划线的属性;
  • 创建对象的方法def __new__(cls ),重写的话可能需要一个星号和两个星号的参数;
  • 销毁对象用__del__(),由python回收机制调用;
  • 对象之所以可以比较是因为有运算符魔术方法属性,只要能比较的都有的;
  • 比较运算符__cmp__(self, other)【eq, lt, gt】
  • 数字运算符__add__(self, other)【sub, mul, div】
  • 逻辑运算符__or__(self, other)【and】
  • python运行首先要经过ebal这个函数,它只能识别机器字符串,用__repr__这个魔术方法来转化;
  • __str__, __unicode__方法也是返回字符串的,str是直接打印对象时调用的;
  • __dir__可以控制调用dir()时要返回的内容;
  • 大部分的内建方法都是有对应魔术方法的,我们自己可以多多总结;
  • __setattr__每次设置时都会调用;
  • __getattr__, getattribute__查询魔术方法,每次没访问到和访问时会调用;
  • 设置和查询魔术方法要防止无限递归,容易出错;
  • 递归1万次会报错;
  • python本身没有访问控制,加了双下划线实际只是改了名字,我们仍然可以访问到;
  • __delattr__删除时会访问到;
  • python2里什么都不继承算是老式类,缺少一些功能;