首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenAPI / JSON中的多重继承/组合

OpenAPI / JSON中的多重继承/组合
EN

Stack Overflow用户
提问于 2017-02-24 22:22:50
回答 2查看 3.9K关注 0票数 3

在OpenAPI中,继承是通过allof实现的。例如,在这个例子

代码语言:javascript
复制
  "definitions": {
    "Pet": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/NewPet"   # <--- here
        },
        [...]
      ]
    },
    "NewPet": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
      }
    },

我在规范中没有发现任何关于多重继承的东西。例如,如果Pet继承自NewPet和OldPet。

用Python,我会写

代码语言:javascript
复制
class Pet(NewPet, OldPet):
    ...

方法解析顺序确定了应该首先检查方法/属性的父类,因此我可以判断Pet.age是NewPet.age还是OldPet.age。

那么,如果让Pet继承NewPet和OldPet,在这两种模式中都定义了name属性,并在每种模式中都定义了不同的值,该怎么办?什么是Pet.name?

代码语言:javascript
复制
  "definitions": {
    "Pet": {
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/NewPet"   # <--- multiple inheritance
          "$ref": "#/definitions/OldPet"
        },
        [...]
      ]
    },
    "NewPet": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
      }
    },
    "OldPet": {
      "type": "object",
      "properties": {
        "name": {
          "type": "integer"    # <-- name redefined here, different type
        },
      }
    },

OldPet会优先吗?NewPet?它是未定义/无效的?它定义了应用程序吗?

我在高傲的编辑上试过这个。显然,带有两个refs的模式是有效的,但是swagger编辑器并不解析这些属性。如果只显示这两个引用的所有内容。

编辑:根据本教程的说法,在相同的范围内有几个参考文献是有效的。但是,对于这两种模式都具有相同名称的不同属性的情况,没有什么可说的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-26 21:04:28

JSON架构不支持继承。allOf的行为有时看起来像继承,但如果您这样想,您最终会感到困惑。

allOf关键字的意思就是:所有模式都必须验证。没有任何东西会被重写或优先于其他任何东西。一切都必须确认。

在您的示例中,JSON值必须完全针对"NewPet“和"OldPet”进行验证。因为没有JSON值可以同时作为字符串和整数进行验证,所以"name“属性的验证总是不能针对"NewPet”或"OldPet“(或两者都验证)进行验证。因此,"Pet“模式永远不会针对任何给定的JSON值进行验证。

票数 5
EN

Stack Overflow用户

发布于 2017-06-25 12:45:24

要考虑的一件事是继承意味着什么。在中,试图创建一个扩展具有相同属性的两个类的类是一个错误。我从来没有少考虑过这种多重继承。

这就是钻石问题。请参阅继承

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42449296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档