(慎用)是一个类变量,变量值可以是字符串、列表、元组或者可迭代对象(意味着所有实例只有一个数据属性)

  为何使用__slots__?优势在于省内存(字典会占用大量内存,如果有一个属性很少的类,但是有很多实例,为了节省内存可以使用__slots__取代实例的__dict__,设置了__slots__之后,__dict__就没了)

  使用点来访问属性本质就是在访问类或对象的__dict__属性字典(类的字典是共享的,而每个实例是独立的)

  特点:不允许设置其他数据属性。  

  

 1 class Foo:
 2     __slots__=['name','age']  #{'name':None,'age':None}
 3     # __slots__='name' #{'name':None,'age':None}
 4 
 5 f1=Foo()
 6 # f1.name='egon'
 7 # print(f1.name)
 8 
 9 # f1.age=18  #--->setattr----->f1.__dict__['age']=18
10 
11 # print(f1.__dict__)
12 print(Foo.__slots__)
13 print(f1.__slots__)
14 f1.name='egon'
15 f1.age=17
16 print(f1.name)
17 print(f1.age)
18 # f1.gender='male'
19 
20 
21 f2=Foo()
22 print(f2.__slots__)
23 f2.name='alex'
24 f2.age=18
25 print(f2.name)
26 print(f2.age)

输出

['name', 'age']
['name', 'age']
egon
17
['name', 'age']
alex
18

收藏 打印