Lab 07: Metaclass Advanced
Overview
Step 1: Metaclass Basics — type as a Metaclass
type as a Metaclass# type() is Python's built-in metaclass
# Every class is an instance of its metaclass
class MyClass:
pass
print(f"type(MyClass): {type(MyClass)}") # <class 'type'>
print(f"type(type): {type(type)}") # <class 'type'>
print(f"isinstance(MyClass, type): {isinstance(MyClass, type)}")
# Creating a class dynamically with type()
DynamicClass = type(
'DynamicClass', # name
(object,), # bases
{ # namespace
'value': 42,
'greet': lambda self: f"Hello from {type(self).__name__}",
}
)
obj = DynamicClass()
print(f"DynamicClass().value: {obj.value}")
print(f"DynamicClass().greet(): {obj.greet()}")Step 2: __prepare__ — Controlling the Class Namespace
__prepare__ — Controlling the Class NamespaceStep 3: Metaclass __new__, __init__, __call__
__new__, __init__, __call__Step 4: Singleton via Metaclass
Step 5: Metaclass Conflict Resolution
Step 6: __init_subclass__ — Hook Without Metaclass
__init_subclass__ — Hook Without MetaclassStep 7: Class Decorators vs Metaclasses
Step 8: Capstone — ORM-Style Field Registry
Summary
Concept
Mechanism
Use Case
Last updated
