內置方法 __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__方法
相關文章
相關標籤/搜索