From dce628dfad76c438ca83bc822aead24197a67378 Mon Sep 17 00:00:00 2001 From: Adam Kelly Date: Thu, 1 Nov 2018 20:22:23 +0000 Subject: [PATCH] Simple metaclass snippet demoing call and new. --- tests/snippets/metaclasses.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 tests/snippets/metaclasses.py diff --git a/tests/snippets/metaclasses.py b/tests/snippets/metaclasses.py new file mode 100644 index 0000000000..864b1446b9 --- /dev/null +++ b/tests/snippets/metaclasses.py @@ -0,0 +1,25 @@ +class MC(type): + classes = [] + count = 0 + + def __new__(cls, name, bases, namespace): + MC.classes.append(name) + return type.__new__(cls, name, bases, namespace) + + def __call__(cls): + MC.count += 1 + return type.__call__(cls, MC.count) + +class C(object, metaclass=MC): + def __new__(cls, count): + self = object.__new__(cls) + self.count = count + return self + +class D(object, metaclass=MC): + pass + +assert MC == type(C) +assert C == type(C()) +assert MC.classes == ['C', 'D'] +assert C().count == 2