Skip to content

Commit 079f0dd

Browse files
authored
gh-91578: improved error message when trying to instantiate an abstract class with missing methods (gh-47246)
1 parent 8a0d9a6 commit 079f0dd

File tree

4 files changed

+9
-8
lines changed

4 files changed

+9
-8
lines changed

Lib/test/test_abc.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ class C(metaclass=abc_ABCMeta):
154154
@abc.abstractmethod
155155
def method_one(self):
156156
pass
157-
msg = r"class C with abstract method method_one"
157+
msg = r"class C without an implementation for abstract method method_one"
158158
self.assertRaisesRegex(TypeError, msg, C)
159159

160160
def test_object_new_with_many_abstractmethods(self):
@@ -165,7 +165,7 @@ def method_one(self):
165165
@abc.abstractmethod
166166
def method_two(self):
167167
pass
168-
msg = r"class C with abstract methods method_one, method_two"
168+
msg = r"class C without an implementation for abstract methods method_one, method_two"
169169
self.assertRaisesRegex(TypeError, msg, C)
170170

171171
def test_abstractmethod_integration(self):
@@ -535,7 +535,7 @@ def updated_foo(self):
535535
A.foo = updated_foo
536536
abc.update_abstractmethods(A)
537537
self.assertEqual(A.__abstractmethods__, {'foo', 'bar'})
538-
msg = "class A with abstract methods bar, foo"
538+
msg = "class A without an implementation for abstract methods bar, foo"
539539
self.assertRaisesRegex(TypeError, msg, A)
540540

541541
def test_update_implementation(self):
@@ -547,7 +547,7 @@ def foo(self):
547547
class B(A):
548548
pass
549549

550-
msg = "class B with abstract method foo"
550+
msg = "class B without an implementation for abstract method foo"
551551
self.assertRaisesRegex(TypeError, msg, B)
552552
self.assertEqual(B.__abstractmethods__, {'foo'})
553553

@@ -605,7 +605,7 @@ def foo(self):
605605

606606
abc.update_abstractmethods(B)
607607

608-
msg = "class B with abstract method foo"
608+
msg = "class B without an implementation for abstract method foo"
609609
self.assertRaisesRegex(TypeError, msg, B)
610610

611611
def test_update_layered_implementation(self):
@@ -627,7 +627,7 @@ def foo(self):
627627

628628
abc.update_abstractmethods(C)
629629

630-
msg = "class C with abstract method foo"
630+
msg = "class C without an implementation for abstract method foo"
631631
self.assertRaisesRegex(TypeError, msg, C)
632632

633633
def test_update_multi_inheritance(self):

Lib/test/test_dataclasses.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3762,7 +3762,7 @@ class Date(A):
37623762
day: 'int'
37633763

37643764
self.assertTrue(inspect.isabstract(Date))
3765-
msg = 'class Date with abstract method foo'
3765+
msg = 'class Date without an implementation for abstract method foo'
37663766
self.assertRaisesRegex(TypeError, msg, Date)
37673767

37683768

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Updates the error message for abstract class.

Objects/typeobject.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4559,7 +4559,7 @@ object_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
45594559

45604560
PyErr_Format(PyExc_TypeError,
45614561
"Can't instantiate abstract class %s "
4562-
"with abstract method%s %U",
4562+
"without an implementation for abstract method%s %U",
45634563
type->tp_name,
45644564
method_count > 1 ? "s" : "",
45654565
joined);

0 commit comments

Comments
 (0)