Python中的__SLOTS__属性使用示例
看python社区大妈组织的内容里边有一篇讲python内存优化的,用到了__slots__。然后查了一下,总结一下。感觉非常有用
python类在进行实例化的时候,会有一个__dict__属性,里边有可用的实例属性名和值。声明__slots__后,实例就只会含有__slots__里有的属性名。
#coding:utf-8 classA(object): x=1 def__init__(self): self.y=2 a=A() printa.__dict__ print(a.x,a.y) a.x=10 a.y=10 print(a.x,a.y) classB(object): __slots__=('x','y') x=1 z=2 def__init__(self): self.y=3 #self.m=5#这个是不成功的 b=B() #print(b.__dict__) print(b.x,b.z,b.y) #b.x=10 #b.z=10 b.y=10 print(b.y) classC(object): __slots__=('x','z') x=1 def__setattr__(self,name,val): ifnameinC.__slots__: object.__setattr__(self,name,val) def__getattr__(self,name): return"Valueof%s"%name c=C() print(c.__dict__) print(c.x) print(c.y) #c.x=10 c.z=10 c.y=10 print(c.z,c.y) c.z=100 print(c.z)
{'y':2} (1,2) (10,10) (1,2,3) 10 Valueof__dict__ 1 Valueofy (10,'Valueofy') 100