zoukankan      html  css  js  c++  java
  • 内置方法 __new__ __del__

     

    1.__new__   构造方法

      实例化对象是先执行__new__方法,但是类中没有__new__方法,所以先到父类object类中的new方法,开辟一个属于对象的空间,然后再执行init方法

      设计模式:常用的有23种,这个概率是在Java中提出来得

      在Python中有俩种人

        一种是推崇设计模式,这种人基本都是由java开发转Python开发的人

        一种是贬低设计模式,这种人就是纯Python开发的人

      常用的一种:单例模式:一个类只有一个实例的时候

    # class Foo:
    #     __instance = None
    #     def __init__(self,name,age):                 # 初始化方法
    #         self.name = name
    #         self.age = age
    #         self.lst = [name]
    #     def __new__(cls, *args, **kwargs):  # 构造方法
    #         if cls.__instance is None:
    #             cls.__instance = object.__new__(cls)   
    #         return cls.__instance    #每次实例化的空间都是同一个空间
    #
    # obj1 = Foo('alex',20)
    # obj2 = Foo('egon',22)
    # print(obj1.lst,obj2.lst)    

    2.__init__    初始化方法

    3.__del__    析构方法:在删除这个类创建对象的时候,会先触发这个方法,再删除对象

            做一些清理工作,比如说关闭文件,关闭网络的链接,数据库的链接

      运用场景:在类中对文件进行抄做的时候,需要关闭文件所以会用到__del__

      触发机制:del

    4.__eq__  判断俩个实例对象是否一致

      触发机制:  ==

    class Staff:
        def __init__(self,name,sex):
            self.name = name
            self.sex = sex
        def __eq__(self, other):
            return self.__dict__ == other.__dict__
    alex = Staff("alex","")
    alex1 = Staff("alex","")
    print(alex == alex1)
    alex3 = Staff("lin","")
    print(alex == alex3)

    5.__hash__   hash()

      每重新执行hash值,hash都会发生变化,但是一次执行的过程中,同一个值对应的hash值是一样的,而字典的查找原理就是利用hash值在一次执行是一样的而快速找到的

      set的去重机制

        对每一个元素进行hash计算出一个内存地址

        到这个内存地址上查看,如果这块内存中没有值,就将这个元素存到对应的内存地址上

     如果这块内存中已经有值,判断这俩个值是否相等如果相等,就会放弃后面的值

     如果不相等,就会二次寻址再找一个新的空间来存储这个值

    6.__len__  触发机制,len(类名)

      应用场景:测量类中的某个列表的长度

    # class Foo:
    #     def __len__(self):
    #         return len(self.student)
    #     def __init__(self):
    #         self.name = "骑士计划"
    #         self.course = "python"
    #         self.student = []
    # s1 = Foo()
    # s1.student.append("wuyi")
    # s1.student.append("lin")
    # s1.student.append("wang")
    # print(len(s1))    #3  会执行列中的__len__方法
  • 相关阅读:
    Error: could not open `C:Program FilesJavajre6libi386jvm.cfg'
    异常:java.lang.IllegalStateException: Ambiguous handler methods mapped for HTTP path '/app/userInfoMaint/getProvince.do'
    解析Java反射
    Cause: java.sql.SQLException: 无效的列索引
    Internet Explorer 无法打开该 Internet 站点,请求的站点不可用或无法找到
    解决The JSP specification requires that an attribute name is preceded by whitespace问题
    pl/sql的to_char和to_date
    oracle 在xml中批量插入,批量修改及多组条件查询
    时间转换模板
    Java网络编程从入门到精通(5):使用InetAddress类的getHostName方法获得域名
  • 原文地址:https://www.cnblogs.com/yuncong/p/9580586.html
Copyright © 2011-2022 走看看