对于用type()构造的类型,mypy“作为类型无效”

时间:2019-10-28 16:22:50

标签: python python-3.x mypy

Foo = type('Foo', (), {})
Bar = Optional[Foo]

mypy抱怨error: Variable "packagename.Foo" is not valid as a type

除了这样做,还有其他方法吗

Class Foo:
    pass

Bar = Optional[Foo]

1 个答案:

答案 0 :(得分:1)

根据您要实现的目标,您可能必须使用genericsliterals

如果以后想从Foo类型继承,请使用泛型:

from typing import Generic, Optional, TypeVar

Foo = TypeVar("Foo")
Bar = Optional[Foo]

class Baz(Generic[Foo]):
    pass

如果您只想引用Foo,则字符串字面量可能是更好的选择:

from random import choice
from typing import Literal, Optional

Foo = Literal["Foo"]
Bar = Optional[Foo]

def foo_to_bar() -> Bar:
    return choice(["Foo", None])