ホームページ >バックエンド開発 >Python チュートリアル >Python で囲まれたクラスの型ヒントを適切に処理するにはどうすればよいですか?

Python で囲まれたクラスの型ヒントを適切に処理するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-18 00:35:11324ブラウズ

How Can I Properly Handle Type Hints for Enclosed Classes in Python?

Python で囲まれたクラスの型ヒントを処理する

問題を理解する

囲みクラスを参照するメソッドを定義する場合class を戻り値の型として使用すると、未解決の参照エラーが発生する可能性があります。 Python 3 の次のコードを考えてみましょう:

class Position:

    def __init__(self, x: int, y: int):
        self.x = x
        self.y = y

    def __add__(self, other: Position) -> Position:
        return Position(self.x + other.x, self.y + other.y)

Position クラスが __add__ メソッドのスコープ内で定義されていないため、このコードは NameError で失敗します。

Python 3.11 を 'Self' で発行する型:

Python 3.11 以降のバージョンでは、Self 型を使用して型ヒント内で囲んでいるクラスを参照できます:

from typing import Self

class Position:

    def __add__(self, other: Self) -> Self:
        return Position(self.x + other.x, self.y + other.y)

Python 3.7 with '__future__ import annotations':

Python を使用している場合3.7 以降では、次のインポート ステートメントを追加することで、アノテーションの延期された評価を有効にできます:

from __future__ import annotations

これを有効にすると、モジュールが完全にロードされ、参照が解決されるまで、型ヒントが文字列として保存されます。問題:

class Position:

    def __add__(self, other: Position) -> Position:
        return Position(self.x + other.x, self.y + other.y)

Python <3.7:

Python バージョン 3.7 より前の場合、一重引用符を使用して、囲んでいるクラスへの文字列参照を指定できます。

class Position:

    def __add__(self, other: 'Position') -> 'Position':
        return Position(self.x + other.x, self.y + other.y)

これにより、前方参照が作成されます。クラスが定義されると解決されます。

追加注:

  • ダミー定義またはモンキーパッチを使用してアノテーションを追加する場合は、アノテーションがクラスの型を正確に反映していることを確認してください。
  • Python 3.10 では、 の延期された評価注釈はデ​​フォルトになる予定でしたが、将来のリリースに延期されました。

以上がPython で囲まれたクラスの型ヒントを適切に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。