Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗pyOpSlIh 116 of 174 menu
◀ ▶

Наследование и ограничение свойств в ООП в 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__ у потомка.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить