2017-05-29 7 views
2

Angenommen den folgenden Code:Gibt es eine Möglichkeit, einen bedingten Typhinweis in Python anzugeben?

from typing import Union 


def invert(value: Union[str, int]) -> Union[int, str]: 
    if isinstance(value, str): 
     return int(value) 
    elif isinstance(value, int): 
     return str(value) 
    else: 
     raise ValueError("value must be 'int' or 'str'") 

es leicht, dass eine zu sehen ist str Eingang mit einem Ausgang int führt und umgekehrt. Gibt es eine Möglichkeit, den Rückgabetyp so anzugeben, dass er diese umgekehrte Beziehung codiert?

Antwort

3

Es gibt nicht wirklich einen natürlichen Weg, um einen bedingten Typ Hinweis in Python im Moment zu spezifizieren.

das gesagt ist, in Ihrem speziellen Fall, Sie overloads verwenden können, um auszudrücken, was Sie zu tun versuchen:

from typing import overload, Union 

# Body of overloads must be empty 

@overload 
def invert(value: str) -> int: 
    pass 

@overload 
def invert(value: int) -> str: 
    pass 

# Implementation goes last, without an overload. 
# Adding type hints here are optional -- if they 
# exist, the function body is checked against the 
# provided hints. 
def invert(value: Union[int, str]) -> Union[int, str]: 
    if isinstance(value, str): 
     return int(value) 
    elif isinstance(value, int): 
     return str(value) 
    else: 
     raise ValueError("value must be 'int' or 'str'") 
Verwandte Themen