內置方法 常用模塊
阿新 • • 發佈:2018-09-04
數據 工作 init ash 都是 自定義 col 裏來 一個
__new__
在init 之前 , 實例化對象的第一步是__new__創建一個空間
class Foo: def __init__(self): # 初始化方法 print(‘執行了init‘) def __new__(cls, *args, **kwargs): # 構造方法 # object.__new__(cls) print(‘執行了new‘) return object.__new__(cls) #如果這個return不寫,init方法永遠不會執行 obj= Foo()
執行了new 先執行new
執行了init
創造一個對象 比喻成 捏小人
new 是小人捏出來
init 是小人穿衣服
設計模式 常用的23種
源頭是從java裏來得 因為Java 開發一個項目 很龐大,個方面人員需要配合,就相應出了一些標準,這樣比較好對接。
python :
推崇設計模式 :會java 也會python 從java轉的python
貶低設計模式:純python開發 因為python 一兩個人就可以開發一個項目
單例模式: 一個類 只有一個實例
class Foo: __instance = Nonedef __init__(self,name,age): # 初始化方法 self.name = name self.age = age self.lst = [name]
#self.lst = [age] 那就只打印年齡 上面的name 被覆蓋
# self。lst = [name,age] 打印名字和年齡
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) 最後結果 print [‘egon‘] [‘egon‘]
__del__
class Foo: def __init__(self,name,age): self.name = name self.age = age self.file = open(‘file‘,mode = ‘w‘) def write(self): self.file.write(‘sjahgkldhgl‘) def __del__(self): # 析構方法 : 在刪除這個類創建的對象的時候會先觸發這個方法,再刪除對象 # 做一些清理工作,比如說關閉文件,關閉網絡的鏈接,數據庫的鏈接 self.file.close() print(‘執行del了‘) f = Foo(‘alex‘,20) # 只要寫了這個__del__ 這個方法,他必定執行,所以可以寫一個關閉文件放著,以防別人忘記關或者自己,寫這個方法上個保險 print(f) 這個方法就是墊底的 別的程序走完 然後走他 最後一道保險
__len__
和len( )這個內置函數 其實差不多 int 和float 不適用 這個__len__同樣不適用
# len() lst dict set str # print(‘__len__‘ in dir(list)) # print(‘__len__‘ in dir(dict)) # print(‘__len__‘ in dir(set)) # print(‘__len__‘ in dir(tuple)) # print(‘__len__‘ in dir(str)) # # print(‘__len__‘ in dir(int)) # print(‘__len__‘ in dir(float)) #後面兩個都是返回 False
__eq__
可以自定義 兩個值是否相等
__hash__
class Foo(): pass obj1 = Foo() obj2 = Foo()
print(hash(obj1))
print(hash(obj1))
兩個對象的內存地址都不一樣
內置方法 常用模塊