slots.py 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. from timeit import timeit
  2. class Point:
  3. def __init__(self, x, y):
  4. self.x = x
  5. self.y = y
  6. class PointSlots:
  7. # Теперь __dict__ не будет и нельзя будет создавать новые атрибуты.
  8. __slots__ = {'x', 'y'}
  9. def __init__(self, x, y):
  10. self.x = x
  11. self.y = y
  12. # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  13. class Person:
  14. __slots__ = {'first_name', 'last_name', 'age'}
  15. def __init__(self, first_name, last_name, age):
  16. self.first_name = first_name
  17. self.last_name = last_name
  18. self.age = age
  19. def __str__(self):
  20. return f"{self.first_name} {self.last_name} is {self.age} years old"
  21. def make_cl1():
  22. s = Point(3, 4)
  23. s.x = 100
  24. s.x
  25. del s.x
  26. def make_cl2():
  27. s = PointSlots(3, 4)
  28. s.x = 100
  29. s.x
  30. del s.x
  31. def main():
  32. print(timeit(make_cl1))
  33. print(timeit(make_cl2))
  34. if __name__ == '__main__':
  35. main()