Аннотация typing.Self (добавлена в Python 3.11.) предоставляет простой и интуитивно понятный способ аннотировать методы, которые возвращают экземпляр своего класса. Это похоже на подход на основе typing.TypeVar, но более лаконичный и простой для понимания.
Общие варианты использования включают альтернативные конструкторы, предоставляемые как методы класса, и методы __enter__(), которые возвращают self:
from typing import Self class MyLock: def __enter__(self) -> Self: self.lock() return self ... class MyInt: @classmethod def fromhex(cls, s: str) -> Self: return cls(int(s, 16)) ...
Аннотацию typing.Self также можно использовать для аннотирования параметров метода или атрибутов того же типа, что и окружающий их класс.
Новое в версии 3.11.
typing.Self.Аннотация typing.Self - это специальный тип для представления текущего закрытого класса.
from typing import Self class Foo: def return_self(self) -> Self: ... return self
Эта аннотация семантически эквивалентна следующей, хотя и в более краткой форме:
from typing import TypeVar Self = TypeVar("Self", bound="Foo") class Foo: def return_self(self: Self) -> Self: ... return self
В общем, если что-то в коде следует шаблону:
class Foo: def return_self(self) -> "Foo": ... return self
Необходимо использовать typing.Self, так как вызовы SubclassOfFoo.return_self будут иметь Foo в качестве возвращаемого типа, а не SubclassOfFoo.
Другие распространенные варианты использования:
cls.__enter__(), возвращающего self.