Python 3.11では PEP-673 Self Type が実装され、 これも型ヒントではお待ちかねの新機能、定義中のクラスを示す型 typing.Self が追加されました。
従来のメソッド定義¶
これまでのPythonでは、クラスのメソッドなどを定義するとき、簡単にメソッドが属するクラスを取得する方法がありませんでした。このため、例えば自分自身を返り値とするメソッドのアノテーションを書くのは面倒で、Python 3.10までは typing.TypeVar を使って次のように記述していました。
from typing import TypeVar
Self = TypeVar("Self", bound="Spam")
class Spam:
def return_me(self: Self) -> Self:
return self
typing.Self¶
Python 3.11では PEP-673 Self Type で提案された typing.Self が追加され、同じアノテーションを TypeVar
をつかわなくても簡潔に書けるようになりました。
from typing import Self
class Spam:
def return_me(self) -> Self:
return self
Self は包有するクラスを示す型変数で、次のようにメソッドや属性の定義で利用できます。
from typing import Self
class Spam:
next_spam: Self|None = None
def join_me(self, other:Self) -> Self:
self.next_spam = other
return self