You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在子类中显示父类__init_subclass__方法的文档字符串?

实现方法

要让子类的文档字符串自动包含__init_subclass__的参数说明,可以在父类Foo的__init_subclass__方法中,主动修改子类的__doc__属性,把父类中该方法的参数描述合并进去。

具体代码实现

先调整Foo类的实现:

class Foo:
    def __init_subclass__(cls, name: str, surname: str):
        """
        name: 用户的名字
        surname: 用户的姓氏
        """
        # 提取__init_subclass__方法的参数说明文档
        param_doc = Foo.__init_subclass__.__doc__.strip()
        
        # 合并到子类的文档字符串中
        if cls.__doc__:
            # 子类已有文档,追加参数说明
            cls.__doc__ = f"{cls.__doc__.strip()}\n\n继承该类时需传入以下参数:\n{param_doc}"
        else:
            # 子类无文档,直接设置为参数说明
            cls.__doc__ = f"继承自Foo类,需传入以下参数:\n{param_doc}"
        
        # 这里写你原本的__init_subclass__逻辑
        cls.name = name
        cls.surname = surname

然后创建子类时,文档字符串会自动带上参数说明:

class Bar(Foo, name='bar', surname='xxx'):
    """这是自定义的Bar子类,用于演示文档合并效果"""
    pass

# 查看子类的文档字符串
print(Bar.__doc__)

效果说明

运行后Bar.__doc__的内容会是:

这是自定义的Bar子类,用于演示文档合并效果

继承该类时需传入以下参数:
name: 用户的名字
surname: 用户的姓氏

如果子类没有自定义文档,比如:

class Baz(Foo, name='baz', surname='yyy'):
    pass

它的__doc__会是:

继承自Foo类,需传入以下参数:
name: 用户的名字
surname: 用户的姓氏

原理

__init_subclass__会在子类被定义时自动触发,此时可以通过cls参数直接操作子类的属性,包括__doc__。通过提取父类中__init_subclass__的参数说明文档,就能自动把继承时需要传入的参数信息同步到子类的文档里,让子类开发者一目了然。

内容的提问来源于stack exchange,提问作者CyDevos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 18:20:43