1. 程式人生 > >內置方法 __new__ __del__

內置方法 __new__ __del__

app 分享 () 設計 author png 創建 inf print

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__