Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions mypyc/irbuild/classdef.py
Original file line number Diff line number Diff line change
Expand Up @@ -760,7 +760,6 @@ def find_attr_initializers(
if cls.builtin_base:
return set(), []

cls_type = dataclass_type(cdef)
attrs_with_defaults: set[str] = set()
default_assignments: list[tuple[AssignmentStmt, str]] = []

Expand All @@ -774,10 +773,11 @@ def find_attr_initializers(
info_ir = builder.mapper.type_to_ir.get(info)
if info_ir is None:
continue
info_cls_type = dataclass_type(info.defn)
for stmt in info.defn.defs.body:
if not isinstance(stmt, AssignmentStmt):
continue
name = default_attr_name(stmt, info_ir, cls_type)
name = default_attr_name(stmt, info_ir, info_cls_type)
if name is None:
continue
attrs_with_defaults.add(name)
Expand Down
12 changes: 11 additions & 1 deletion mypyc/test-data/run-python37.test
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,15 @@ class Person5:
friends: Set[str] = field(default_factory=set)
parents: FrozenSet[str] = frozenset()

@dataclass
class HasFactoryDefault:
x: dict[str, int] = field(default_factory=dict)

class InheritsDataclassInit(HasFactoryDefault):
pass

[file other.py]
from native import Person1, Person1b, Person2, Person3, Person4, Person5, testBool
from native import Person1, Person1b, Person2, Person3, Person4, Person5, testBool, InheritsDataclassInit
i1 = Person1(age = 5, name = 'robot')
assert i1.age == 5
assert i1.name == 'robot'
Expand Down Expand Up @@ -125,6 +132,9 @@ assert Person1.__annotations__ == {'age': int, 'name': str}
assert Person2.__annotations__ == {'age': int, 'name': str}
assert Person5.__annotations__ == {'weight': float, 'friends': set,
'parents': frozenset}
v = InheritsDataclassInit()
assert isinstance(v.x, dict)
assert v.x == {}

[file driver.py]
import sys
Expand Down
Loading