mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Allow usage of SomeABC.register as a class decorator. Patch by Edoardo Spadolini (#10868).
This commit is contained in:
parent
5390d00cc6
commit
6c3787cb70
5 changed files with 36 additions and 3 deletions
|
@ -121,11 +121,12 @@ class TestABC(unittest.TestCase):
|
|||
self.assertFalse(issubclass(B, (A,)))
|
||||
self.assertNotIsInstance(b, A)
|
||||
self.assertNotIsInstance(b, (A,))
|
||||
A.register(B)
|
||||
B1 = A.register(B)
|
||||
self.assertTrue(issubclass(B, A))
|
||||
self.assertTrue(issubclass(B, (A,)))
|
||||
self.assertIsInstance(b, A)
|
||||
self.assertIsInstance(b, (A,))
|
||||
self.assertIs(B1, B)
|
||||
class C(B):
|
||||
pass
|
||||
c = C()
|
||||
|
@ -134,6 +135,27 @@ class TestABC(unittest.TestCase):
|
|||
self.assertIsInstance(c, A)
|
||||
self.assertIsInstance(c, (A,))
|
||||
|
||||
def test_register_as_class_deco(self):
|
||||
class A(metaclass=abc.ABCMeta):
|
||||
pass
|
||||
@A.register
|
||||
class B(object):
|
||||
pass
|
||||
b = B()
|
||||
self.assertTrue(issubclass(B, A))
|
||||
self.assertTrue(issubclass(B, (A,)))
|
||||
self.assertIsInstance(b, A)
|
||||
self.assertIsInstance(b, (A,))
|
||||
@A.register
|
||||
class C(B):
|
||||
pass
|
||||
c = C()
|
||||
self.assertTrue(issubclass(C, A))
|
||||
self.assertTrue(issubclass(C, (A,)))
|
||||
self.assertIsInstance(c, A)
|
||||
self.assertIsInstance(c, (A,))
|
||||
self.assertIs(C, A.register(C))
|
||||
|
||||
def test_isinstance_invalidation(self):
|
||||
class A(metaclass=abc.ABCMeta):
|
||||
pass
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue