Python3.11の新機能 Python 3.11の新機能(その6) 型ヒントの新機能 - PEP-673 Self型

(その1) CPython高速化計画(その2) 特殊化適応的インタープリタ(その3) 関数呼び出しのインライン化(その4) 例外グループとTaskGroup(その5) PEP-646 可変長ジェネリックス(その6) PEP-673 Self型(その7) PEP-681 データクラス変換(その8) PEP-655 TypedDictの要素ごとに省略可・不可を指定する(その9) その他の型ヒント関連機能(その10) 正規表現 - アトミックグループとPossessive指定子(その11) 標準ライブラリ(その12) Python本体の機能追加

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
Copyright © 2001-2023 python.jp Privacy Policy python_japan
Amazon.co.jpアソシエイト
Amazonで他のPython書籍を検索