内置方法 __new__ __del__

 

1.__new__   构造方法java

  实例化对象是先执行__new__方法,可是类中没有__new__方法,因此先到父类object类中的new方法,开辟一个属于对象的空间,而后再执行init方法python

  设计模式:经常使用的有23种,这个几率是在Java中提出来得数据库

  在Python中有俩种人设计模式

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

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

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

# 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__    析构方法:在删除这个类建立对象的时候,会先触发这个方法,再删除对象code

        作一些清理工做,好比说关闭文件,关闭网络的连接,数据库的连接对象

  运用场景:在类中对文件进行抄作的时候,须要关闭文件因此会用到__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__方法
相关文章
相关标签/搜索