复杂的问题我承担,但学习OWL打开一个新的角度来生活,宇宙和一切。我要在这里哲学

我想实现一个C类是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
>>> 

显然,蟒是智能和禁止这个。然而,在OWL也可以定义两个类是相互的子类。现在的问题是:究竟是为什么,这是在OWL允许的(这是不是一种编程语言)和编程语言不允许的令人震惊的解释

有帮助吗?

解决方案

Python不让它因为没有合理的办法做到这一点。你可以创造如何处理这样的情况下(也许还有一些语言做)任意性的规则,但由于没有实际收益在这样做,Python的拒绝猜测。类都要求有一个稳定的,可预测的方法的解析顺序为多种原因,所以怪异,不可预测的或令人惊奇的活性氧代谢是不允许的。

这就是说,有一种特殊情况在Python:typeobjectobjecttype的一个实例,typeobject的子类。当然,type type的一个实例(因为它是object的子类)。这可能是为什么OWL允许它。你需要一些奇异启动类/元类层次结构,如果你想要的一切是一个对象,所有对象有一个类

其他提示

用Python实现(如2.3)的MRO方案禁止环状子类。有效的MRO的保证,以满足“本地优先级”和“单调”。循环子类化将打破单调。

此问题在/题为“坏方法解析订单” <节中讨论一>

此“断开”的部分原因是因为OWL描述了一种开放的世界本体。本体有很少或没有做的一个节目,不是一个程序可以操纵本体等。

试图涉及OWL概念来编程语言就像是试图涉及钢琴家和A钢琴奏鸣曲。

奏鸣曲并没有真正有一个具体的manifestion直到有人打它 - 理想的钢琴家,但不一定。直到它正在播放,它只是音之间的潜在的关系表现为声音。当它正在播放,一些实际的关系将是与你有关,听者。一些将不相关的监听器。

我想答案是“当你构建C类...它必须..这必须创建C类的实例...等造成B类的实例”这将永远不会结束。这在大多数语言禁止(其实我不知道其他的情况下)。 只能创建一个对象与“参考”到其他对象,可以是最初为null。

有关语义推理,如果A是B的子类,而B是A的子类,那么类可以被视为等同。它们不是“相同”的,但是从推理的角度来看,如果我可以推理的个体是(或不是)的类A的一个成员,我可以推理个体是(或不是)B类中的一员该类A和B是语义上等同,这是你能与OWL表达

我敢肯定有人能了一个例子,其中这是有道理的。然而,我想这限制是更容易和不那么强大。

例如,假设A类持有的字段a和b。 C类持有b和c。然后由C事物的视图将是:A.A,C.B,C.C和从A视图将是:A.A,A·B,C.C.

只需移动b分成一个共同的基类被更容易理解和实施,虽然。

scroll top