能否在子类中显示父类__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
相关产品推荐
相关产品推荐

