web-dev-qa-db-ja.com

mypy "Type()で構築されたタイプのタイプとしては無効です"

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

闇はerror: Variable "packagename.Foo" is not valid as a type _

何をしてもこれを回避する方法はあります

Class Foo:
    pass

Bar = Optional[Foo]
 _

11
user3534080

あなたはおそらく Generics または リテラル を使用する必要があります( - === - )。達成しようとしています。

Fooの後で継承したい場合は、Genericsを使用してください。

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])
 _
1