diff options
author | Christian Heimes <christian@cheimes.de> | 2007-11-30 14:32:41 (GMT) |
---|---|---|
committer | Christian Heimes <christian@cheimes.de> | 2007-11-30 14:32:41 (GMT) |
commit | 2e510fb9202977d93cc364e0c661769ea4a8cbbc (patch) | |
tree | 7d109639c031eae4f5c177e7ea5371c5e0737fa6 /Lib | |
parent | c8967002353864e012567125d7824abaeeb31dd3 (diff) | |
download | cpython-2e510fb9202977d93cc364e0c661769ea4a8cbbc.zip cpython-2e510fb9202977d93cc364e0c661769ea4a8cbbc.tar.gz cpython-2e510fb9202977d93cc364e0c661769ea4a8cbbc.tar.bz2 |
Fix for bug #1109
Warning required when calling register() on an ABCMeta subclass.
Diffstat (limited to 'Lib')
-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) |