python-24-如何派生類內建不可變型別並修改其例項化行為?如何為建立大量例項節省記憶體?
阿新 • • 發佈:2019-01-10
# 建立一個插口IntTuple,包含內建插口tuple,行為一致.tuple是一個不可變物件,所以我們不能從self來刪除一些資料 class IntTuple(tuple): #__new__的引數是一個類物件,此時我們來修改他 def __new__(cls,iterable): # 使用生成器物件 g = (x for x in iterable if isinstance(x,int) and x > 0) return super(IntTuple,cls).__new__(cls,g) def __init__(self,iterable): # py2需要在__init__裡面傳參 print(self) #此時已經建立好了 super(IntTuple,self).__init__() t = IntTuple([1,-1,'abc',6,['x','y'],3]) print(t)
from e import Player,Player2
p1 = Player(‘0001’,’Jim’)
p2 = Player2(‘0001’,’Jim’)
如果p1比p2使用的記憶體多的話,那麼一定是多了某些屬性
dir(p1)
dir(p2)
這樣看有些麻煩,我們可以這樣:
set(dir(p1)) – set(dir(p2))
__dict__是一個字典,例項動態繫結屬性的字典,屬性就是字典裡的一項
當然,既然有動態新增,我們也可以動態解除
動態繫結屬性的特性,是以犧牲記憶體為代價的
我們可以import sys模組來監測
使用__slots__來解除動態繫結,也就沒有了__dict__屬性了