Наследование и ограничение свойств в ООП в Python
Если у родителя задан __slots__,
потомок может завести свои свойства.
Их имена нужно перечислить в своем
__slots__. Пустой список
новых имен не добавляет.
Пусть родитель User хранит
name и age:
class User:
__slots__ = ('name', 'age')
def __init__(self, name, age):
self.name = name
self.age = age
Сделаем потомка Employee,
но в его __slots__ не укажем
salary, и попробуем записать
это поле в конструкторе:
class Employee(User):
__slots__ = ()
def __init__(self, name, age, salary):
super().__init__(name, age)
self.salary = salary
Employee('john', 25, 100) # ошибка AttributeError
Объект не создаётся: свойства salary
нет ни в списке родителя, ни в списке
потомка. Исправим класс, добавив
имя в свой __slots__:
class Employee(User):
__slots__ = ('salary',)
def __init__(self, name, age, salary):
super().__init__(name, age)
self.salary = salary
emp = Employee('john', 25, 100)
print(emp.salary) # выведет 100
Сделайте класс Manager,
наследующий User со слотами.
Добавьте поле team_size
через свой __slots__
у потомка.