【发布时间】:2021-09-28 23:32:45
【问题描述】:
所以,我对 Python 有点陌生,对 OOP 范式也有点陌生,最近我遇到了一些似乎有点违反直觉的事情。例如,看看下面的代码(在 Python 3.9 上运行):
from collections.abc import Container
class OddContainer:
def __contains__(self, x):
if not isinstance(x, int) or not x%2:
return False
return True
if __name__ == '__main__':
x = OddContainer()
print(isinstance(x, Container))
这里的print会输出True,表示OddContainer是Container的子类,但是OddContainer类没有明确指定它的超类。
有人能告诉我这里到底发生了什么吗?说任何在内部重载了__contains__() 方法的类成为Container 类的子类是否正确,或者这是一种天真的解释?如果前者是正确的,那么还有其他情况会发生这种通过方法重载进行的继承吗?
提前致谢。
【问题讨论】:
标签: python inheritance containers abstract-class