Python Glossary English

Python 3.15+typingпонятие

@typing.disjoint_base

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

Декоратор для анализаторов типов: класс — непересекающаяся база, и наследоваться сразу от него и от другой такой базы нельзя.

Синтаксис

@typing.disjoint_base
class C: ...

Во время выполнения декоратор ничего не запрещает — он только помечает класс. Смысл в статической проверке: если int и str — непересекающиеся базы, анализатор знает, что значение не может быть одновременно экземпляром обоих, и может найти недостижимую ветку вроде isinstance(x, int) and isinstance(x, str). В CPython таким свойством обладают встроенные классы с собственной раскладкой памяти: class C(int, str) падает с TypeError: multiple bases have instance lay-out conflict; в заглушках (.pyi) их и помечают этим декоратором.

Примеры

from typing import disjoint_base
@disjoint_base
class Shape:
    pass
print(Shape.__name__)  # → Shape — во время выполнения класс обычный
try:
    class Both(int, str):
        pass
except TypeError as e:
    print(e)  # → multiple bases have instance lay-out conflict

См. также

Частые ошибки

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