Nâng CaoPython iconPython

Metaclasses trong Python là gì? Khi nào dùng?

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"):
    pass

Dùng metaclass cho: Singleton, ORM models (Django Model, SQLAlchemy), plugin systems, API enforcement.

Xem toàn bộ Python cùng filter theo level & chủ đề con.

Mở danh sách Python