类型提示为工厂方法的返回值?

时间:2019-05-23 20:57:09

标签: python python-3.6

我想知道在Python 3.6+中为Factory方法执行类型提示的正确方法。理想情况下,我想使用联合,但是我要从自动生成的Protobuf模块中导入一个其中包含大量不同类的模块。在利用类型提示时处理这种情况的最佳方法是什么。

我目前有类似的东西:

from testing import test as t

def generate_class(class_type: str) -> # What should go here?
    if class_type in t.__dict__:
        return t.__dict__[class_type]

    ex_msg = "{} not found in the module library".format(class_type)
    raise KeyError(ex_msg)

1 个答案:

答案 0 :(得分:0)

我不确定下面的可运行代码是否与您的用例匹配,但是如果匹配,则可以使用TypeVar定义返回类型来处理这种情况。

from typing import TypeVar, Text #from testing import test as t t = type('test', (object,), {'Text': Text, 'bytes': bytes}) LibraryType = TypeVar(t.__dict__) def generate_class(class_type: str) -> LibraryType: if class_type in t.__dict__: return t.__dict__[class_type] ex_msg = "{} not found in the module library".format(class_type) raise KeyError(ex_msg) print("generate_class('Text'):", generate_class('Text')) # -> generate_class('Text'): <class 'str'> print("generate_class('bytes'):", generate_class('bytes')) # -> generate_class('bytes'): <class 'bytes'> print("generate_class('foobar'):", generate_class('foobar')) # -> KeyError: 'foobar not found in the module library' PEP 484 -- Type HintsGenerics部分中进行了说明。

{{1}}