27

Python 3.5 では、型注釈が追加されました (こちらを参照)。

ツリーのような構造など、再帰的な型注釈を定義する方法はありますか?

class Employee(object):
    def __init__(self, name: str, reports: List[Employee]):
       self.name = name
       self.reports = reports

上記では、アノテーションが機能しているようには見えませんList[Employee]。コードを実行すると、次のエラーが発生します。

NameError: name 'Employee' is not defined

4

1 に答える 1

47

PEP 484 で定義されている前方参照を使用できます

これが一般的に発生する状況は、定義されているクラスがいくつかのメソッドのシグネチャで発生するコンテナ クラスの定義です。たとえば、次のコード (単純なバイナリ ツリー実装の開始) は機能しません。

class Tree:
    def __init__(self, left: Tree, right: Tree):
        self.left = left
        self.right = right

これに対処するために、次のように記述します。

class Tree:
    def __init__(self, left: 'Tree', right: 'Tree'):
        self.left = left
        self.right = right

文字列リテラルを型ヒントの一部として使用できます。次に例を示します。

class Tree:
    ...
    def leaves(self) -> List['Tree']:
于 2016-07-13T01:13:55.387 に答える