From 2e510fb9202977d93cc364e0c661769ea4a8cbbc Mon Sep 17 00:00:00 2001 From: Christian Heimes Date: Fri, 30 Nov 2007 14:32:41 +0000 Subject: Fix for bug #1109 Warning required when calling register() on an ABCMeta subclass. --- Lib/abc.py | 5 ++++- Lib/test/test_abc.py | 7 +++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/Lib/abc.py b/Lib/abc.py index 54dc8e2..30bb6b0 100644 --- a/Lib/abc.py +++ b/Lib/abc.py @@ -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) -- cgit v0.12