Python中的__SLOTS__属性使用示例

时间:2022-02-26 01:30:15

看python社区大妈组织的内容里边有一篇讲python内存优化的,用到了__slots__。然后查了一下,总结一下。感觉非常有用

python类在进行实例化的时候,会有一个__dict__属性,里边有可用的实例属性名和值。声明__slots__后,实例就只会含有__slots__里有的属性名。

  1. # coding: utf-8 
  2.    
  3.    
  4. class A(object): 
  5.   x = 1 
  6.    
  7.   def __init__(self): 
  8.     self.y = 2 
  9.    
  10. a = A() 
  11. print a.__dict__ 
  12. print(a.x, a.y) 
  13. a.x = 10 
  14. a.y = 10 
  15. print(a.x, a.y) 
  16.    
  17.    
  18. class B(object): 
  19.   __slots__ = ('x''y'
  20.   x = 1 
  21.   z = 2 
  22.    
  23.   def __init__(self): 
  24.     self.y = 3 
  25.     # self.m = 5 # 这个是不成功的 
  26.    
  27.    
  28. b = B() 
  29. # print(b.__dict__) 
  30. print(b.x, b.z, b.y) 
  31. # b.x = 10 
  32. # b.z = 10 
  33. b.y = 10 
  34. print(b.y) 
  35.    
  36.    
  37. class C(object): 
  38.   __slots__ = ('x''z'
  39.   x = 1 
  40.    
  41.   def __setattr__(self, name, val): 
  42.     if name in C.__slots__: 
  43.       object.__setattr__(self, name, val) 
  44.    
  45.   def __getattr__(self, name): 
  46.     return "Value of %s" % name 
  47.    
  48.    
  49. c = C() 
  50. print(c.__dict__) 
  51. print(c.x) 
  52. print(c.y) 
  53. # c.x = 10 
  54. c.z = 10 
  55. c.y = 10 
  56. print(c.z, c.y) 
  57. c.z = 100 
  58. print(c.z) 

 

  1. {'y': 2} 
  2. (1, 2) 
  3. (10, 10) 
  4. (1, 2, 3) 
  5. 10 
  6. Value of __dict__ 
  7. Value of y 
  8. (10, 'Value of y'
  9. 100