summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_dataclasses.py
diff options
context:
space:
mode:
authorYurii Karabas <1998uriyyo@gmail.com>2021-09-02 16:17:13 (GMT)
committerGitHub <noreply@github.com>2021-09-02 16:17:13 (GMT)
commit0635e201beaf52373f776ff32702795e38f43ae3 (patch)
treef23518d81af71a099800426fdc5147a5dd1a9d0c /Lib/test/test_dataclasses.py
parent767a17f35a581da664ac8cf5d67281da9485eebf (diff)
downloadcpython-0635e201beaf52373f776ff32702795e38f43ae3.zip
cpython-0635e201beaf52373f776ff32702795e38f43ae3.tar.gz
cpython-0635e201beaf52373f776ff32702795e38f43ae3.tar.bz2
bpo-45081: Fix __init__ method generation when inheriting from Protocol (GH-28121)
Co-authored-by: Ken Jin <28750310+Fidget-Spinner@users.noreply.github.com>
Diffstat (limited to 'Lib/test/test_dataclasses.py')
-rw-r--r--Lib/test/test_dataclasses.py22
1 files changed, 21 insertions, 1 deletions
diff --git a/Lib/test/test_dataclasses.py b/Lib/test/test_dataclasses.py
index 8e645ae..33c9fcd 100644
--- a/Lib/test/test_dataclasses.py
+++ b/Lib/test/test_dataclasses.py
@@ -10,7 +10,7 @@ import inspect
import builtins
import unittest
from unittest.mock import Mock
-from typing import ClassVar, Any, List, Union, Tuple, Dict, Generic, TypeVar, Optional
+from typing import ClassVar, Any, List, Union, Tuple, Dict, Generic, TypeVar, Optional, Protocol
from typing import get_type_hints
from collections import deque, OrderedDict, namedtuple
from functools import total_ordering
@@ -2150,6 +2150,26 @@ class TestInit(unittest.TestCase):
self.x = 2 * x
self.assertEqual(C(5).x, 10)
+ def test_inherit_from_protocol(self):
+ # Dataclasses inheriting from protocol should preserve their own `__init__`.
+ # See bpo-45081.
+
+ class P(Protocol):
+ a: int
+
+ @dataclass
+ class C(P):
+ a: int
+
+ self.assertEqual(C(5).a, 5)
+
+ @dataclass
+ class D(P):
+ def __init__(self, a):
+ self.a = a * 2
+
+ self.assertEqual(D(5).a, 10)
+
class TestRepr(unittest.TestCase):
def test_repr(self):