Foo = type('Foo', (), {})
Bar = Optional[Foo]
mypy抱怨error: Variable "packagename.Foo" is not valid as a type
除了这样做,还有其他方法吗
Class Foo:
pass
Bar = Optional[Foo]
?
答案 0 :(得分:1)
根据您要实现的目标,您可能必须使用generics或literals。
如果以后想从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])