bpo-31506: Clarify error messages for object.__new__ and object.__init__ (GH-11641)
`object.__new__` and `object.__init__` do take one argument each,
they just don't take extra user supplied arguments.
Patch by Sanyam Khurana.
(cherry picked from commit 5105483acb3aca318304bed056dcfd7e188fe4b5)
Co-authored-by: Sanyam Khurana <8039608+CuriousLearner@users.noreply.github.com>
diff --git a/Lib/test/test_class.py b/Lib/test/test_class.py
index 841cac9..dcaedf4 100644
--- a/Lib/test/test_class.py
+++ b/Lib/test/test_class.py
@@ -602,19 +602,21 @@
class C:
pass
+ error_msg = r'C.__init__\(\) takes exactly one argument \(the instance to initialize\)'
+
with self.assertRaisesRegex(TypeError, r'C\(\) takes no arguments'):
C(42)
with self.assertRaisesRegex(TypeError, r'C\(\) takes no arguments'):
C.__new__(C, 42)
- with self.assertRaisesRegex(TypeError, r'C\(\).__init__\(\) takes no arguments'):
+ with self.assertRaisesRegex(TypeError, error_msg):
C().__init__(42)
with self.assertRaisesRegex(TypeError, r'C\(\) takes no arguments'):
object.__new__(C, 42)
- with self.assertRaisesRegex(TypeError, r'C\(\).__init__\(\) takes no arguments'):
+ with self.assertRaisesRegex(TypeError, error_msg):
object.__init__(C(), 42)
# Class with both `__init__` & `__new__` method overridden
@@ -624,13 +626,15 @@
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
- with self.assertRaisesRegex(TypeError, r'object.__new__\(\) takes no argument'):
+ error_msg = r'object.__new__\(\) takes exactly one argument \(the type to instantiate\)'
+
+ with self.assertRaisesRegex(TypeError, error_msg):
D(42)
- with self.assertRaisesRegex(TypeError, r'object.__new__\(\) takes no argument'):
+ with self.assertRaisesRegex(TypeError, error_msg):
D.__new__(D, 42)
- with self.assertRaisesRegex(TypeError, r'object.__new__\(\) takes no argument'):
+ with self.assertRaisesRegex(TypeError, error_msg):
object.__new__(D, 42)
# Class that only overrides __init__
@@ -638,10 +642,12 @@
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
- with self.assertRaisesRegex(TypeError, r'object.__init__\(\) takes no argument'):
+ error_msg = r'object.__init__\(\) takes exactly one argument \(the instance to initialize\)'
+
+ with self.assertRaisesRegex(TypeError, error_msg):
E().__init__(42)
- with self.assertRaisesRegex(TypeError, r'object.__init__\(\) takes no argument'):
+ with self.assertRaisesRegex(TypeError, error_msg):
object.__init__(E(), 42)
if __name__ == '__main__':