Skip to content

var = MyType() raise a var-annotated error #16047

Description

@pythoniste

Bug Report

Given that :

MyType = dict[str, int]

This line raise an var-annotated error :

d = MyType()

I have to write :

d:MyType = MyType()

This is redundant. I think this is a bug because the following code works perfectly fine :

d = dict[str, int]()

And it is basically the same thing.

Side note : I know that the following code exists :

from typing import NewType
MyType2 = NewType("MyType2", dict[str, int])
d = MyType2({})

But I do not want to create a new type, I just want to create a specific annotation (a shortcut) and deal with multiple dictionaries that resemble to each other.

In my original code, my type is dict[tuple[int, Decimal], dict[SomeDataclass, dict[str, SomeOtherDataclass]]]. You might understand why I do which to use a shortcut.

To Reproduce

This is a complete example :

d1: dict[str, int] = {}
d2 = dict[str, int]()

MyType = dict[str, int]  # This is the shortcut

d3: MyType = {}
d4 = MyType()

from typing import NewType
MyType2 = NewType("MyType2", dict[str, int])

d5: MyType2
d6 = MyType2({})

Expected Behavior

mypy my_example.py should not return any errors.

Actual Behavior

mypy my_example.py returns :

my_example.py:7:1: error: Need type annotation for "d4" (hint: "d4: Dict[<type>, <type>] = ...") [var-annotated]

Your Environment

  • Mypy version used: 1.5.1
  • Mypy command-line flags: None
  • Mypy configuration options from mypy.ini (and other config files): None
  • Python version used: 3.10.12

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugmypy got something wrong

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions