forked from Rust-related/RustPython
Simple metaclass snippet demoing call and new.
This commit is contained in:
25
tests/snippets/metaclasses.py
Normal file
25
tests/snippets/metaclasses.py
Normal 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
|
||||
Reference in New Issue
Block a user