ホームページ > バックエンド開発 > Python チュートリアル > Pythonで囲みクラス型を使用してメソッドをタイプヒントする方法?

Pythonで囲みクラス型を使用してメソッドをタイプヒントする方法?

Mary-Kate Olsen
リリース: 2024-12-27 19:04:10
オリジナル
804 人が閲覧しました

How to Type Hint a Method with the Enclosing Class Type in Python?

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

タイプヒントは、Python で次のことを示すために使用されます。変数の予期される型または関数の戻り値。これらは、コードの意図された動作を文書化する方法を提供し、エラーを早期に発見するのに役立ちます。

問題ステートメント:

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)
ログイン後にコピー

ただし、エディター (PyCharm) は、タイプ ヒント内の Position への参照がエラーであることを示すエラー フラグを立てます。 __add__ を解決できません。これにより、次のような疑問が生じます: 戻り値の型が Position 型であるように指定するにはどうすればよいですか?

解決策:

Python では、型ヒンティングには主に 3 つのアプローチがあります。使用している Python のバージョンに応じて、それを囲んでいるクラスの型を持つメソッド:

Python 3.11 :

from typing import Self

class Position:
    def __add__(self, other: Self) -> Self:
        ...
ログイン後にコピー

from __future__ インポート アノテーションを使用した Python 3.7:

from __future__ import annotations

class Position:
    def __add__(self, other: Position) -> Position:
        ...
ログイン後にコピー

Python 3.6 および以前:

class Position:
    def __add__(self, other: 'Position') -> 'Position':
        ...
ログイン後にコピー

説明:

  • Python 3.11 : 特別に設計された新しい型アノテーション Self が導入されました囲みのタイプを参照するためclass.
  • Python 3.7 と from __future__ import アノテーション: 型アノテーションの延期された評価を有効にし、モジュールが完全にロードされるまで文字列として保存します。
  • Python 3.6 以前: 型でクラス名の文字列表現を使用します。ヒント。

コンパイル前の要件:

3.7 より前の Python バージョンでは、型ヒントで文字列を使用するには、参照されるクラスが定義されている必要があります。型アノテーションで使用する前に。それ以外の場合は、NameError が発生します。

考慮事項:

  • Python 3.11 では、より明示的で読みやすい参照方法を提供するため、Self の使用が推奨されます。囲み型。
  • Python 3.7 以降では、__future__ import からアノテーションにより、型付けモジュールをインポートするコードのパフォーマンスが大幅に向上します。
  • 3.6 より前の Python バージョンでは、文字列ベースのアプローチが、外側のクラスの型ヒントの唯一のオプションです。

型ヒントはオプションですが、コードの可読性、エラー チェック、保守性を大幅に向上させることができることに注意してください。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート