如果我在父类中定义了__getstate__()和__setstate__(),那么子类能够继承这些方法吗?在this SO answer中有一些相关的讨论,但只对前面的双下划线( but )的方法进行讨论。
一些额外的信息:
发布于 2017-06-08 20:13:29
是的,dunder继承得很好。在答案中,链接到的文档是https://docs.python.org/2/reference/lexical_analysis.html#reserved-classes-of-identifiers
__*__系统定义的名字。这些名称由解释器及其实现(包括标准库)定义。当前的系统名称将在“特殊方法名称”部分和其他部分中讨论。在Python的未来版本中可能会有更多的定义。在任何上下文中,没有显式记录的使用__*__名称的任何使用都会在没有警告的情况下被破坏。
它是一个独立于__*类的类-私有名称。
链接的另一个部分是https://docs.python.org/2/reference/expressions.html#atom-identifiers,它可能更清楚:
如果类定义中以文本形式出现的标识符以两个或多个下划线字符开头,而不以两个或多个下划线结尾,则该标识符被视为该类的私有名称。
粗体强调我的名字;以两个下划线开头和以两个下划线结尾的名字不是类私名。
请注意,这两个类的名称都是继承的(继承是通过在类的MRO中查找属性名称来实现的)。名字被损坏并不能阻止他们被继承,这就是为什么这些名字在一开始就被损坏了。通过用_ClassName子类前缀这些名称,可以重用名称,并自动不发生冲突,因为这些名称具有自己的_SubClass前缀。
发布于 2022-09-07 15:53:05
__repr__有一个例外,它不是继承的。
https://stackoverflow.com/questions/44444733
复制相似问题