Python中子类为何不继承__doc__属性/方法?同类特殊成员有哪些?
__doc__继承异常的原因及同类特殊成员解析
为什么子类无法继承父类的__doc__属性/方法?
Python中,__doc__是类级别的特殊属性,默认用于存储类的文档字符串。当你定义子类时,Python解释器会自动为子类生成专属的__doc__属性:
- 如果子类没有写文档字符串,解释器会把它设为
None; - 这个自动生成的类级
__doc__会直接覆盖从父类继承来的同名实例方法或property。
看你提供的代码:
- 当你在父类里把
__doc__定义为实例方法时,子类Child的类级__doc__被解释器设为None,所以实例访问Child("test").__doc__时,拿到的是类的None,而非父类的实例方法,调用自然会报错。 - 当你把
__doc__定义为property时,同理,子类实例访问__doc__优先取类级的None,完全不会触发父类定义的实例property逻辑。
而__other__是普通的自定义双下划线成员,不属于Python的特殊内置属性,所以遵循正常的继承规则,子类实例能正常继承调用。
还有哪些具有类似继承特性的成员?
Python中还有几个解释器会自动处理的特殊类属性,它们不会从父类继承,而是每个类拥有自己的专属值:
__module__:存储类定义所在的模块名,子类会自动设置为自身定义的模块,不会继承父类的__module__;__qualname__:类的限定名称(反映类的层级结构),子类会生成自己的__qualname__,比如嵌套类的__qualname__会包含外层类名;__annotations__:类的注解字典,子类默认拥有空的__annotations__,除非自身定义,否则不会继承父类的注解;__class__:实例属性,每个实例的__class__指向自身所属的类,而非父类。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

