Metaclass là "class của class" — kiểm soát cách class được tạo ra. type là metaclass mặc định của tất cả classes.
python
# type() tạo class dynamically
MyClass = type('MyClass', (BaseClass,), {'attr': 42, 'method': lambda self: ...})
# Custom metaclass
class SingletonMeta(type):
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super().__call__(*args, **kwargs)
return cls._instances[cls]
class Database(metaclass=SingletonMeta):
def __init__(self):
self.connection = None
db1 = Database()
db2 = Database()
assert db1 is db2 # True — cùng instance
# __init_subclass__ — thay thế nhẹ nhàng hơn metaclass
class PluginBase:
_plugins = {}
def __init_subclass__(cls, plugin_name: str, **kwargs):
super().__init_subclass__(**kwargs)
PluginBase._plugins[plugin_name] = cls
class MyPlugin(PluginBase, plugin_name="my_plugin"):
passDùng metaclass cho: Singleton, ORM models (Django Model, SQLAlchemy), plugin systems, API enforcement.