本身的类子类。为什么禁止相互子类化?
问题内容:
我认为这是一个复杂的问题,但是研究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中的特殊情况:type
和object
。object
是的实例type
,type
是的子类object
。当然,type
它
也是的
一个实例type
(因为它是的子类object
)。这可能就是OWL允许这样做的原因:如果您希望所有事物都成为一个对象并且所有对象都具有一个类,则需要以某种特殊性启动类/元类层次结构。