diff options
-rw-r--r-- | Lib/abc.py | 5 | ||||
-rw-r--r-- | Lib/test/test_abc.py | 7 |
2 files changed, 11 insertions, 1 deletions
@@ -137,8 +137,11 @@ class ABCMeta(type): cls._abc_negative_cache_version = ABCMeta._abc_invalidation_counter return cls - def register(cls, subclass): + def register(cls, subclass=None): """Register a virtual subclass of an ABC.""" + if subclass is None: + raise TypeError("register() cannot be called on an ABCMeta " + "subclass, use class Example(metaclass=abc.ABCMeta) instead.") if not isinstance(cls, type): raise TypeError("Can only register classes") if issubclass(subclass, cls): diff --git a/Lib/test/test_abc.py b/Lib/test/test_abc.py index e6c8415..a04b271 100644 --- a/Lib/test/test_abc.py +++ b/Lib/test/test_abc.py @@ -146,6 +146,13 @@ class TestABC(unittest.TestCase): C() self.assertEqual(B.counter, 1) + def test_error_on_subclass(self): + class A(abc.ABCMeta): + pass + class B: + pass + self.assertRaises(TypeError, A.register, B) + def test_main(): test_support.run_unittest(TestABC) |