A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/python/typeshed/issues/11653 below:

`dataclasses.make_dataclass` should accept Any, not type · Issue #11653 · python/typeshed · GitHub

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 | None

But 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


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4