Skip to content

Commit dce628d

Browse files
committed
Simple metaclass snippet demoing call and new.
1 parent aa955c9 commit dce628d

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

tests/snippets/metaclasses.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class MC(type):
2+
classes = []
3+
count = 0
4+
5+
def __new__(cls, name, bases, namespace):
6+
MC.classes.append(name)
7+
return type.__new__(cls, name, bases, namespace)
8+
9+
def __call__(cls):
10+
MC.count += 1
11+
return type.__call__(cls, MC.count)
12+
13+
class C(object, metaclass=MC):
14+
def __new__(cls, count):
15+
self = object.__new__(cls)
16+
self.count = count
17+
return self
18+
19+
class D(object, metaclass=MC):
20+
pass
21+
22+
assert MC == type(C)
23+
assert C == type(C())
24+
assert MC.classes == ['C', 'D']
25+
assert C().count == 2

0 commit comments

Comments
 (0)