Code Explanation:
1. Creating a Global Registry
registry = {}
A dictionary named registry is created.
It will be used to store references to classes by name.
Purpose:
To keep track of all classes created using the metaclass.
2. Defining a Custom Metaclass
class Meta(type):
Meta is a metaclass because it inherits from type.
It controls how classes are created.
3. Overriding the Metaclass __new__ Method
def __new__(cls, name, bases, dct):
c = super().__new__(cls, name, bases, dct)
registry[name] = c
return c
This runs every time a new class is defined using this metaclass.
Parameters:
cls → the metaclass (Meta)
name → class name being created ("A", "B")
bases → parent classes
dct → class attribute dictionary
What it does:
Calls type.__new__ to create the actual class object.
Stores the class object in the registry dictionary using its name as key.
Returns the created class.
So every class created with this metaclass is automatically registered.
4. Creating Class A
class A(metaclass=Meta): pass
Python uses Meta to create class A.
Meta.__new__ is called with:
name = "A"
A is created and stored in:
registry["A"] = A
5. Creating Subclass B
class B(A): pass
B inherits from A.
Since A uses metaclass Meta, B automatically uses Meta too.
Meta.__new__ runs again:
registry["B"] = B
6. Printing the Registry Keys
print(sorted(registry.keys()))
registry.keys() returns: ["A", "B"]
sorted() sorts them alphabetically.
print() prints the sorted list.
7. Final Output
['A', 'B']
Final Answer
✔ Output:
['A', 'B']


0 Comments:
Post a Comment