diff options
author | Yurii Karabas <1998uriyyo@gmail.com> | 2021-09-02 16:17:13 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-09-02 16:17:13 (GMT) |
commit | 0635e201beaf52373f776ff32702795e38f43ae3 (patch) | |
tree | f23518d81af71a099800426fdc5147a5dd1a9d0c /Lib/test/test_dataclasses.py | |
parent | 767a17f35a581da664ac8cf5d67281da9485eebf (diff) | |
download | cpython-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.py | 22 |
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): |