diff --git a/mypy/plugins/dataclasses.py b/mypy/plugins/dataclasses.py index 628b24eb75b47..e23288452ec1c 100644 --- a/mypy/plugins/dataclasses.py +++ b/mypy/plugins/dataclasses.py @@ -233,7 +233,8 @@ def collect_attributes(self) -> Optional[List[DataclassAttribute]]: if isinstance(node, PlaceholderNode): # This node is not ready yet. return None - assert isinstance(node, Var) + if not isinstance(node, Var): + continue # x: ClassVar[int] is ignored by dataclasses. if node.is_classvar: diff --git a/test-data/unit/check-dataclasses.test b/test-data/unit/check-dataclasses.test index 097222c91d8f8..860a46ac3bb62 100644 --- a/test-data/unit/check-dataclasses.test +++ b/test-data/unit/check-dataclasses.test @@ -860,6 +860,33 @@ class Foo: [builtins fixtures/list.pyi] [out] +[case testMutableProperty] +# flags: --python-version 3.6 +from dataclasses import dataclass +from typing import Optional + +@dataclass(init=False) +class C: + a: Optional[int] + + def __init__(self, a: Optional[int] = None) -> None: + self._a: Optional[int] = None + self.a = a + + @property + def a(self) -> Optional[int]: + return self._a + + @a.setter + def a(self, value: Optional[int]) -> Optional[int]: + self._a = value + return self._a + +c = C() +c.a = 10 +c.a = "foo" # E: Incompatible types in assignment (expression has type "str", variable has type "Optional[int]") + +[builtins fixtures/list.pyi] [case testDisallowUntypedWorksForward] # flags: --disallow-untyped-defs --python-version 3.7 from dataclasses import dataclass