python学习17--对象的一些BIF,描述符类

__init__方法不允许有返回值
__new__(class[,..])在init方法之前调用,并把参数原封不动的传给init方法。
  若当前类继承于一个不可变的类型例如:str,需要重写该方法。例如:定义一个字符串类
  特点是:字符串内所有的字符都是大写,其他方法不变。则该类需继承str类,并需要在new方法中先将所有的字符变为大写。疑:为什么不在init方法中进行大写转换。因为str类对象的类型不能改变。

__del__,在所有对该对象的引用销毁之后,才会调用该方法,即:并不是del 一个对象就会调用该方法。可以在类中重写add,sub,or等算数,逻辑运算符进行自定义算数运算。

__divmod__.返回一个元祖(商,余数)
__str__.在print(object),在print的参数是一个实例化对象的时候,可以自动调用对象内重写的该方法,进行打印字符串。
__repr__.直接输入对象,即可打印定制的字符串内容。例:>>a.可以打印实例化对象a的类的repr内定制的内容
当类中发生赋值或者get属性操作,就会调用,__getsttr__,__setattrbute()__或者__setattr__()函数等(当前赋值的属性不存在时才调用,发生在setattrbute函数之后);
如果此时在重写的__setattr__()函数中存在赋值语句,会发生死递归。
   解决方法:用super.__setattr__(),进行赋值。
  或者是用upers.__dict__[name]=value.进行赋值
  一般情况下,直接调用基类的方法进行。

 ·       
描述符:
    将某一特殊类型类的实例指派给另外一个类的属性。该特殊类被称为描述符类。

  该类需实现至少一个下述方法:

  
 
 其中,instance表示上述另外一个类的实例object。
  ower表示另外一个类class.
  value属性值。

      

原文地址:https://www.cnblogs.com/zjh225901/p/6337158.html