內置方法 __new__ __del__
阿新 • • 發佈:2018-09-03
app 分享 () 設計 author png 創建 inf print
實例化對象是先執行__new__方法,但是類中沒有__new__方法,所以先到父類object類中的new方法,開辟一個屬於對象的空間,然後再執行init方法
# 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)
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計算出一個內存地址
# 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__