dunder方法是继承的吗?

Bol*_*ain 1 python inheritance

如果我定义__getstate__()__setstate__()在父类中,孩子是否能够继承这些方法?在这个SO答案中有一些相关的讨论,但仅限于具有前面的双下划线(dunder)的方法.

一些额外的信息:

  • 我这样做是为了定义我的类的序列化(酸洗)行为.
  • Python 2.7

Mar*_*ers 5

是的,dunder方法继承得很好.从答案那里,链接的文档是保留的标识符类:

__*__
系统定义的名称.这些名称由解释器及其实现(包括标准库)定义.当前系统名称在特殊方法名称部分和其他地方讨论.更多可能会在未来的Python版本中定义.任何使用的__*__名称,在任何情况下,不遵循明确记载的使用,如有破损不会发出警告.

这是一个单独的类__* 类私有名.

链接的另一部分是标识符(名称),它们可能更清晰:

如果在类定义中以文本方式出现的标识符以两个或多个下划线字符开头,并且不以两个或多个下划线结尾,则将其视为该类的私有名称.

大胆强调我的; 以两个下划线开头并以两个下划线结尾的名称不是类私有名称.

请注意,这两个名称类都是继承的(继承通过在类的MRO中查找属性名称来工作).这些名称被破坏并不会阻止它们被继承,这就是为什么这些名称首先被破坏了.通过为这些名称添加_ClassName子类前缀可以重用名称并自动不进行冲突,因为它们会获得自己的_SubClass前缀.