内置方法 __new__ __del__

Posted yuncong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内置方法 __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__方法

 

以上是关于内置方法 __new__ __del__的主要内容,如果未能解决你的问题,请参考以下文章

python中__init__ ,__del__ &__new__

面向对象的内置属性和内置

面向对象之内置方法

类的内置方法:__del__

3.1.13 内置方法--__del__(self)

魔方方法之--类的构造(__init__,__new__)和析构(__del__)方法