gpt4 book ai didi

python - 自身的类子类。为什么禁止相互子类化?

转载 作者:太空狗 更新时间:2023-10-30 01:45:24 24 4
gpt4 key购买 nike

我认为这是一个复杂的问题,但学习 OWL 为生活、宇宙和一切打开了一个新的视角。我在这里要哲学化。

我正在尝试实现一个 C 类,它是 B 的子类,而 B 又是 C 的子类。只是为了好玩,你知道......

原来是这样

>>> class A(object): pass
...
>>> class B(A): pass
...
>>> class C(B): pass
...
>>> B.__bases__
(<class '__main__.A'>,)
>>> B.__bases__ = (C,)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: a __bases__ item causes an inheritance cycle
>>>

很明显,python 很聪明并禁止这样做。然而,在 OWL 中,可以将两个类定义为相互的子类。问题是:为什么这在 OWL(不是编程语言)中被允许而在编程语言中被禁止的令人难以置信的解释是什么?

最佳答案

Python 不允许这样做,因为没有明智的方法来做到这一点。您可以发明关于如何处理这种情况的任意规则(也许某些语言会这样做),但由于这样做没有实际好处,Python 拒绝猜测。出于多种原因,要求类具有稳定、可预测的方法解析顺序,因此不允许出现奇怪、不可预测或令人惊讶的 MRO。

也就是说, Python 中有一个特例:typeobjectobjecttype 的实例,typeobject 的子类。当然,type 也是 type 的实例(因为它是object 的子类)。这可能就是 OWL 允许它的原因:如果您希望一切都是一个对象并且所有对象都有一个类,则需要在某个奇异点开始一个类/元类层次结构。

关于python - 自身的类子类。为什么禁止相互子类化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2223300/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com