返回

Python 魔术方法详解(四):构建篇

后端

前言

踏入 Python 魔术方法的殿堂,我们继续探索与类构建息息相关的 init_subclass 方法。

init_subclass 魔术方法

init_subclass 方法于 Python 3.6 中横空出世,扮演着类被继承时的特殊角色。当一个子类继承父类时,init_subclass 方法就会在子类创建后被自动调用。

语法

def __init_subclass__(cls, **kwargs):
    # 代码块

作用

init_subclass 方法为我们提供了在子类创建后自定义逻辑的机会。我们可以利用它来:

  • 限制子类创建
  • 检查子类元数据
  • 执行子类初始化操作
  • 向子类注入属性或方法

案例

限制子类创建

class Base:
    def __init_subclass__(cls, name, *args, **kwargs):
        if name != "Derived":
            raise TypeError("只能创建 Derived 子类")

class Derived(Base):
    pass  # 允许创建 Derived 子类

检查子类元数据

class Base:
    def __init_subclass__(cls, name, *args, **kwargs):
        if not hasattr(cls, "required_attr"):
            raise TypeError("子类必须包含 required_attr 属性")

class Derived(Base):
    required_attr = "值"  # 符合条件

执行子类初始化操作

class Base:
    def __init_subclass__(cls, name, *args, **kwargs):
        print(f"创建子类 {name}")

class Derived(Base):
    pass  # 打印:创建子类 Derived

向子类注入属性或方法

class Base:
    def __init_subclass__(cls, name, *args, **kwargs):
        setattr(cls, "injected_attr", "注入的值")

class Derived(Base):
    pass  # Derived 类中包含 injected_attr 属性

SEO 优化

结论

init_subclass 魔术方法赋予了我们对子类构建过程的非凡控制力。通过掌握其原理和应用技巧,我们可以提升 Python 代码的灵活性和可扩展性,构建更加健壮、可定制的类结构。