[解決済み] 現在のクラスを戻り値の型アノテーションとして置く [重複] 。
2022-05-09 23:41:38
質問
<余談
Python 3では、引数と戻り値の型アノテーションを作成することができます。例
class Graph:
def __init__(self, V: int, E: int, edges: list):
pass
@classmethod
def fromfile(cls, readobj: type(sys.stdin)):
pass
def V(self) -> int:
pass
def E(self) -> int:
pass
問題は、まだ定義されていない現在のクラス(Graph)の戻り値の型を持つアノテーションを作ることができないことです。 例
class Graph:
def reverse(self) -> Graph:
pass
このコードはエラーになります
def reverse(self) -> Graph:
NameError: name 'Graph' is not defined
これらのアノテーションは、ドキュメントを作成する際にも、IDEが引数や戻り値の型を認識する際にも非常に便利です => オートコンプリートを有効にします。
UPDです。
ということで、これは不可能か、あるいは私が好まないハックが必要だということになり、私は単に
def reverse (self) -> 'Graph':
これは、ルール違反ではあるが、ドキュメントとしては理解できる。欠点はIDEのオートコンプリートが使えないことです。
解決方法は?
というわけで、しばらくして、私がとった決断は
-> 'Graph'
の代わりに
-> Graph
. 私のIDE(PyCharm)ではこの方法では型を認識することができませんが、ドキュメントの作成には十分な働きをします。
もうひとつ考えられるのは、実行時にアノテーションを変更することですが、これではドキュメンテーションの問題が解決されません。
この問題の根源は、クラスが実際に定義される前にクラスオブジェクトを認識することにあります。これはPythonでは単純に不可能なことです。
関連
-
PythonはWordの読み書きの変更操作を実装している
-
[解決済み】ImportError: PILという名前のモジュールがない
-
[解決済み】 AttributeError: モジュール 'matplotlib' には属性 'plot' がない。
-
[解決済み】 AttributeError("'str' object has no attribute 'read'")
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] オブジェクトの種類を決定しますか?
-
[解決済み] インスタンスのクラス名を取得する?
-
[解決済み] Could not find or load main class "とはどういう意味ですか?
-
[解決済み】メソッドの型ヒントは、どのようにエンクロージャクラスの型を使用するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python Decorator 練習問題
-
python implement mysql add delete check change サンプルコード
-
Python 可視化 big_screen ライブラリ サンプル 詳細
-
Evidentlyを用いたPythonデータマイニングによる機械学習モデルダッシュボードの作成
-
[解決済み】pygame.error: ビデオシステムが初期化されていない
-
[解決済み】csv.Error:イテレータはバイトではなく文字列を返すべき
-
[解決済み】 AttributeError: モジュール 'matplotlib' には属性 'plot' がない。
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】ValueError: pickleプロトコルがサポートされていません。3、python2 pickleはpython3 pickleでダンプしたファイルを読み込むことができない?
-
[解決済み】メソッドの型ヒントは、どのようにエンクロージャクラスの型を使用するのですか?