168. __slots__ for Memory EfficiencyPage 4
class Person:
__slots__ = ('name', 'age')
def __init__(self, name, age):
self.name = name
self.age = age
p = Person("Alice", 30)
print(p.name, p.age)
# p.address = "New York" # AttributeError: 'Person' object has no attribute 'address'import sys
class WithoutSlots:
def __init__(self, name, age):
self.name = name
self.age = age
class WithSlots:
__slots__ = ('name', 'age')
def __init__(self, name, age):
self.name = name
self.age = age
obj1 = WithoutSlots("Alice", 30)
obj2 = WithSlots("Alice", 30)
print(sys.getsizeof(obj1.__dict__)) # Memory used without __slots__
print(sys.getsizeof(obj2)) # Memory used with __slots__Last updated