zoukankan      html  css  js  c++  java
  • 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属性值。

          

  • 相关阅读:
    如何理解联合文件系统?
    Docker 学习笔记(一)
    Bzoj 3124: [Sdoi2013]直径 题解
    Bzoj 3131 [Sdoi2013]淘金 题解
    欧拉路(题目)
    硬币问题
    线段树、树状数组
    Splay树、Treap树
    模拟退火
    广搜题目(一本通)
  • 原文地址:https://www.cnblogs.com/zjh225901/p/6337158.html
Copyright © 2011-2022 走看看