Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 7593574

Browse filesBrowse files
author
et-repositories
authored
gh-116647: Fix recursive child in dataclasses (#116790)
1 parent 3cac2af commit 7593574
Copy full SHA for 7593574

File tree

Expand file treeCollapse file tree

3 files changed

+13
-1
lines changed
Filter options
Expand file treeCollapse file tree

3 files changed

+13
-1
lines changed

‎Lib/dataclasses.py

Copy file name to clipboardExpand all lines: Lib/dataclasses.py
+3-1Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1075,7 +1075,9 @@ def _process_class(cls, init, repr, eq, order, unsafe_hash, frozen,
10751075
cmp_fields = (field for field in field_list if field.compare)
10761076
terms = [f'self.{field.name}==other.{field.name}' for field in cmp_fields]
10771077
field_comparisons = ' and '.join(terms) or 'True'
1078-
body = [f'if other.__class__ is self.__class__:',
1078+
body = [f'if self is other:',
1079+
f' return True',
1080+
f'if other.__class__ is self.__class__:',
10791081
f' return {field_comparisons}',
10801082
f'return NotImplemented']
10811083
func = _create_fn('__eq__',

‎Lib/test/test_dataclasses/__init__.py

Copy file name to clipboardExpand all lines: Lib/test/test_dataclasses/__init__.py
+9Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2471,6 +2471,15 @@ def __repr__(self):
24712471

24722472

24732473
class TestEq(unittest.TestCase):
2474+
def test_recursive_eq(self):
2475+
# Test a class with recursive child
2476+
@dataclass
2477+
class C:
2478+
recursive: object = ...
2479+
c = C()
2480+
c.recursive = c
2481+
self.assertEqual(c, c)
2482+
24742483
def test_no_eq(self):
24752484
# Test a class with no __eq__ and eq=False.
24762485
@dataclass(eq=False)
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix recursive child in dataclasses

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.