Ответ
В Python существуют механизмы, которые помогают контролировать наследование и изменение классов, обеспечивая предсказуемость и надежность кода:
-
@final
(PEP 591) — декоратор, запрещающий наследование от класса или переопределение метода, что гарантирует стабильность базовой реализации.from typing import final @final class Base: def method(self): pass class Child(Base): # Ошибка: Cannot inherit from final class "Base" # def method(self): # Ошибка: Cannot override final method "method" pass
-
@dataclass(frozen=True)
(из модуляdataclasses
) — делает атрибуты класса неизменяемыми после инициализации, предотвращая случайные модификации и обеспечивая иммутабельность объектов.from dataclasses import dataclass @dataclass(frozen=True) class Point: x: int y: int p = Point(1, 2) # p.x = 3 # Ошибка: cannot assign to field 'x' (при попытке изменить атрибут)
-
@sealed
(PEP 622) — декоратор, ограничивающий набор возможных подклассов (пока не реализован в стандартной библиотеке). Его цель — позволить строго контролировать иерархию типов, предотвращая создание непредусмотренных подклассов.
Эти механизмы помогают создавать более надежный и предсказуемый код, предотвращая нежелательные изменения в иерархии классов и состоянии объектов.