Skip to content

Commit

Permalink
[3.12] gh-119581: Add a test of InitVar with name shadowing (GH-119582)…
Browse files Browse the repository at this point in the history
… (#119673)

gh-119581: Add a test of InitVar with name shadowing (GH-119582)
(cherry picked from commit 6ec3712)

Co-authored-by: Steven Troxler <[email protected]>
  • Loading branch information
miss-islington and stroxler authored May 28, 2024
1 parent 3af9b75 commit 08636c1
Showing 1 changed file with 23 additions and 0 deletions.
23 changes: 23 additions & 0 deletions Lib/test/test_dataclasses/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -1317,6 +1317,29 @@ def __post_init__(self, init_base, init_derived):
c = C(10, 11, 50, 51)
self.assertEqual(vars(c), {'x': 21, 'y': 101})

def test_init_var_name_shadowing(self):
# Because dataclasses rely exclusively on `__annotations__` for
# handling InitVar and `__annotations__` preserves shadowed definitions,
# you can actually shadow an InitVar with a method or property.
#
# This only works when there is no default value; `dataclasses` uses the
# actual name (which will be bound to the shadowing method) for default
# values.
@dataclass
class C:
shadowed: InitVar[int]
_shadowed: int = field(init=False)

def __post_init__(self, shadowed):
self._shadowed = shadowed * 2

@property
def shadowed(self):
return self._shadowed * 3

c = C(5)
self.assertEqual(c.shadowed, 30)

def test_default_factory(self):
# Test a factory that returns a new list.
@dataclass
Expand Down

0 comments on commit 08636c1

Please sign in to comment.