ホームページ >バックエンド開発 >Python チュートリアル >Python で囲んでいるクラス型を使用してメソッドをタイプヒントするにはどうすればよいですか?

Python で囲んでいるクラス型を使用してメソッドをタイプヒントするにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-18 02:26:09275ブラウズ

How Can I Type Hint a Method Using the Enclosing Class Type in Python?

囲んでいるクラス型を使用したメソッドの型ヒント

Python では、型ヒント メソッドを使用して、引数の予期される型を指定できます。そして値を返します。ただし、外側のクラス型を参照するメソッドを扱う場合、Python の動的な性質によりあいまいさが発生する可能性があります。

前方参照の問題

次のコード スニペット:

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)

ここで、 __add__ メソッドは引数として別の Position インスタンスを期待しており、 Position インスタンスを返します。ただし、Python では型ヒント内で前方参照が許可されていないため、アノテーション内でクラス名 Position を直接使用するとエラーが発生します。

前方参照に 'Self' を使用する (Python 3.11 )

Python 3.11 の PEP 673 の導入により、Self 型は入力から利用できるようになりました。モジュール。 Self を使用すると、外側のクラス型への前方参照が可能になります。

from typing import Self

class Position:

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

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

「from future import アノテーション」を使用する (Python 3.7 )

Python 3.7 以降では、 from __future__ import アノテーション future ステートメントにより、注釈。これは、型アノテーションが文字列として保存され、後でモジュールが完全にロードされたときに評価されることを意味します:

from __future__ import annotations

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)

前方参照に文字列を使用する (Python バージョン 3.7 より古い)

Python 3.7 より前では、クラス名の代わりに文字列を使用することが、転送に推奨されるアプローチでしたReferences:

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)

これは、これらの型ヒントが見つかる前にクラス定義が見つかる限り機能します。ただし、型ヒントでの文字列の使用は、すべてのコード エディターや分析ツールでサポートされているわけではないことに注意することが重要です。

以上がPython で囲んでいるクラス型を使用してメソッドをタイプヒントするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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