python运行时类型检查

时间:2016-12-17 18:22:14

标签: python python-3.5 mypy

我想检查一个函数的输出和另一个函数的输入之间的类型兼容性。我知道mypy会进行静态类型检查,但是从python运行它时我找不到任何东西。这是我想要做的一个例子:

from typing import Union, Callable
import inspect


def gt_4(num: Union[int, float]) -> bool:
    return num > 4


def add_2(num: Union[int, float]) -> float:
    return num + 2.0


def types_are_compatible(type1, type2):
    """ return True if types are compatible, else False """
    # how to do this in a clean way? 
    # some kind of MyPy API would be nice here to not reinvent the wheel

# get annotations for output of func1 and input of func2
out_annotation = inspect.signature(gt_4).return_annotation
in_annotation = inspect.signature(add_2).parameters.get('num').annotation

# check if types are compatible, 
types_are_compatible(out_annotation, in_annotation)

我发现了一个名为typegaurd的小型github项目似乎做了类似的事情,但我真的不愿意使用一个小的第三方库来处理我正在处理的代码。最干净的方法是什么?我可以直接使用标准库或MyPy内置的东西吗?

0 个答案:

没有答案