forked from faif/python-patterns
-
Notifications
You must be signed in to change notification settings - Fork 0
/
registry.py
49 lines (38 loc) · 1.18 KB
/
registry.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#!/usr/bin/env python
# -*- coding: utf-8 -*-
class RegistryHolder(type):
REGISTRY = {}
def __new__(cls, name, bases, attrs):
new_cls = type.__new__(cls, name, bases, attrs)
"""
Here the name of the class is used as key but it could be any class
parameter.
"""
cls.REGISTRY[new_cls.__name__] = new_cls
return new_cls
@classmethod
def get_registry(cls):
return dict(cls.REGISTRY)
class BaseRegisteredClass(metaclass=RegistryHolder):
"""
Any class that will inherits from BaseRegisteredClass will be included
inside the dict RegistryHolder.REGISTRY, the key being the name of the
class and the associated value, the class itself.
"""
pass
if __name__ == "__main__":
print("Before subclassing: ")
for k in RegistryHolder.REGISTRY:
print(k)
class ClassRegistree(BaseRegisteredClass):
def __init__(self, *args, **kwargs):
pass
print("After subclassing: ")
for k in RegistryHolder.REGISTRY:
print(k)
### OUTPUT ###
# Before subclassing:
# BaseRegisteredClass
# After subclassing:
# BaseRegisteredClass
# ClassRegistree