ホームページ >バックエンド開発 >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 で囲まれたクラスの型ヒントを適切に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。