Python Glossary English

Python 3.8+typingпонятие

typing.final

декораторы и маркеры

Декоратор @final: класс нельзя наследовать, метод нельзя переопределять. Запрет проверяет только тайп-чекер, а не интерпретатор.

Синтаксис

@final
class Leaf: ...

Не путайте с Final: typing.Final — аннотация переменной (MAX: Final = 10, «не переприсваивать»), а @final — декоратор класса или метода. В рантайме наследование от @final-класса проходит молча, ошибку покажут только mypy или pyright. С 3.11 декоратор ставит __final__ = True, но это обычный атрибут класса, и наследник получает его тоже, так что getattr(Sub, '__final__') у подкласса тоже True — для проверки берите vars(cls).

Примеры

# Python 3.11+
from typing import final
@final
class Leaf:
    pass
class Other(Leaf):  # mypy: Cannot inherit from final class
    pass
print(Leaf.__final__, getattr(Other, '__final__', False))  # → True True — атрибут унаследован
print('__final__' in vars(Other))  # → False
from typing import final
class Base:
    @final
    def done(self) -> str:
        return 'base'
class Sub(Base):
    def done(self) -> str:  # mypy: Cannot override final attribute
        return 'sub'
print(Sub().done())  # → sub — интерпретатор не мешает

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности