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