Simple metaclass snippet demoing call and new.

This commit is contained in:
Adam Kelly
2018-11-01 20:22:23 +00:00
parent aa955c9ca3
commit dce628dfad

View File

@@ -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