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Сообщить о неточности