如何在spyne中实现抽象模型

how to implement abstract model in spyne

我需要使用 Spyne 实现一个抽象模型。

事实上,举个简单的例子,我想管理一家车库业务。

然后我有以下 classes:

class Vehicle(ComplexModel):
     ''' this class is abstract '''
     _type_info = [
         ('owner',Unicode)
     ]

class Car(Vehicle):
    _type_info = [
        ('color',Unicode),
        ('speed',Integer)
    ]

class Bike(Vehicle):
    _type_info = [
        ('size',Integer)
    ]

class Garage(ComplexModel):

    _type_info = [
        ('vehicles',Array(Vehicle))
    ]

当我想让我的车库管理所有车辆时,我只会获得它们的 Vehicle 属性(这里也称为 owner),而不是其他的。

有没有办法用 Spyne 管理抽象对象?

当然,一个简单的方法是:

class Garage(ComplexModel):

    _type_info = [
        ('bikes',Array(Bike)),
        ('cars',Array(Car))
    ]

但我不喜欢它:如果我这样做,我每次创建新载具时都必须更改 "Garage" class...我希望我的车库 class 管理车辆,无论它是什么类型的车辆。可能吗?

对于 Spyne 2.12.1-beta,输出多态性应该可以使用 Array(Vehicle) 语法工作(当为输出协议启用时)。

请在此处查看工作示例:https://github.com/arskom/spyne/blob/a2d0edd3be5bc0385548f5212b7b4b6d674fd610/examples/xml/polymorphic_array.py