2016-08-30 7 views
2

現在定義されている型を(型ヒントとして)メソッドの戻り値の型として指定したいと思います。ここで(Python型ヒント)メソッドから返される型として現在定義されている型を指定する方法は?

は例です:

def idToObj(cls, elmId: int)->Action: 

ありがとうよう

class Action(Enum): 
    ignore = 0 
    replace = 1 
    delete = 2 

    @classmethod 
    # I would like something like 
    # def idToObj(cls, elmId: int)->Action: 
    # but I cannot specify Action as the return type 
    # since it would generate the error 
    # NameError: name 'Action' is not defined 
    def idToObj(cls, elmId: int): 
     if not hasattr(cls, '_idToObjDict'): 
      cls._idToObjDict = {} 
      for elm in list(cls): 
       cls._idToObjDict[elm.value] = elm 

     return cls._idToObjDict[elmId] 

は、理想的には私が何かを指定することが好きだろう。

答えて

5

この場合は、公式type hints PEPに記載されている:

型ヒントを後で解決する、 定義は文字列リテラルとして表現することができることを、まだ定義されていない名前が含まれている場合。

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 

それは次のようになります。

def idToObj(cls, elmId: int)->'Action': 
    pass # classmethod body 
関連する問題