← Back to index

dataclasses_frozen.py

True Positive
False Positive
False Negative
Optional (detected)
Warning or Info
TP: 4
FP: 0
FN: 0
Optional: 0 / 0
1"""
2Tests validation of frozen dataclass instances.
3"""
4
5# Specification: https://peps.python.org/pep-0557/#frozen-instances
6
7from dataclasses import dataclass
8
9@dataclass(frozen=True)
10class DC1:
11 a: float
12 b: str
14dc1 = DC1(1, "")
16dc1.a = 1 # E: dataclass is frozen
[invalid-assignment] Property `a` defined in `DC1` is read-only
17dc1.b = "" # E: dataclass is frozen
[invalid-assignment] Property `b` defined in `DC1` is read-only
20# This should generate an error because a non-frozen dataclass
21# cannot inherit from a frozen dataclass.
22@dataclass # E[DC2]
23class DC2(DC1): # E[DC2]
Tag 'DC2' [invalid-frozen-dataclass-subclass] Non-frozen dataclass `DC2` cannot inherit from frozen dataclass `DC1`
24 pass
26@dataclass
27class DC3:
28 a: int
30# This should generate an error because a frozen dataclass
31# cannot inherit from a non-frozen dataclass.
32@dataclass(frozen=True) # E[DC4]
33class DC4(DC3): # E[DC4]
Tag 'DC4' [invalid-frozen-dataclass-subclass] Frozen dataclass `DC4` cannot inherit from non-frozen dataclass `DC3`
34 pass
37@dataclass(frozen=True)
38class DC1Child(DC1):
39 # This should be allowed because attributes within a frozen
40 # dataclass are covariant rather than invariant.
41 a: int