-
-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Closed
Labels
help wantedAn actionable problem of low to medium complexity where a PR would be very welcomeAn actionable problem of low to medium complexity where a PR would be very welcomestubs: false positiveType checkers report false errorsType checkers report false errors
Description
It has been reported before about UnionType vs type. The original bug mentioned something like:
def f1(a: type) -> None:
...
f1(int | None)Resulting in:
Argument 1 to "f1" has incompatible type "UnionType"; expected "type"
The issue has been dismissed saying that UnionType was not a type. But sometimes strange things happen (from a developer's perspective).
Defining a data class in a declarative style works fine:
@dataclass
class D1:
a: int | NoneBut doing the same thing programatically fails:
D2 = make_dataclass("D2", [("a", int | None)])Results in:
List item 0 has incompatible type "tuple[str, UnionType]"; expected "str | tuple[str, type] | tuple[str, type, Any]"
Because UnionType is a class, mypy is technically correct, but isn't the situation ridiculous? D1.a is a UnionType and that wasn't a problem before, but with D2 it is.
Defining named tuples works fine either way:
class NT1(NamedTuple):
a: int | None
NT2 = NamedTuple("NT2", [("a", int | None)])Fine, if UnionType is not a union type, then what is the way to express a union type?
See https://mypy-play.net/?mypy=latest&python=3.12&gist=92e2f18ed8b463b0d7675c50bb73ee99
Metadata
Metadata
Assignees
Labels
help wantedAn actionable problem of low to medium complexity where a PR would be very welcomeAn actionable problem of low to medium complexity where a PR would be very welcomestubs: false positiveType checkers report false errorsType checkers report false errors