java
實例化對象是先執行__new__方法,可是類中沒有__new__方法,因此先到父類object類中的new方法,開闢一個屬於對象的空間,而後再執行init方法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)
設計
code
對象
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__方法