Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 2e510fb

Browse files
committed
Fix for bug #1109
Warning required when calling register() on an ABCMeta subclass.
1 parent c896700 commit 2e510fb

2 files changed

Lines changed: 11 additions & 1 deletion

File tree

Lib/abc.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,11 @@ def __new__(mcls, name, bases, namespace):
137137
cls._abc_negative_cache_version = ABCMeta._abc_invalidation_counter
138138
return cls
139139

140-
def register(cls, subclass):
140+
def register(cls, subclass=None):
141141
"""Register a virtual subclass of an ABC."""
142+
if subclass is None:
143+
raise TypeError("register() cannot be called on an ABCMeta "
144+
"subclass, use class Example(metaclass=abc.ABCMeta) instead.")
142145
if not isinstance(cls, type):
143146
raise TypeError("Can only register classes")
144147
if issubclass(subclass, cls):

Lib/test/test_abc.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,13 @@ class C(A, B):
146146
C()
147147
self.assertEqual(B.counter, 1)
148148

149+
def test_error_on_subclass(self):
150+
class A(abc.ABCMeta):
151+
pass
152+
class B:
153+
pass
154+
self.assertRaises(TypeError, A.register, B)
155+
149156

150157
def test_main():
151158
test_support.run_unittest(TestABC)

0 commit comments

Comments
 (0)