如何在spyne中实现抽象模型

时间:2015-07-17 13:11:33

标签: python soap spyne

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

事实上,让我们说 - 作为一个简单的例子 - 我想管理车库业务。

然后我有以下课程:

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))
    ]

当我想让我的车库管理所有车辆时,我只会获得他们的车辆属性(也就是所有者),而不是其他车辆。

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

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

class Garage(ComplexModel):

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

但我不喜欢它:如果我这样做,每次创建一个新的Vehicle类时我都要改变我的“车库”类...我希望我的车库类能够管理车辆,无论什么类型它是车辆。有可能吗?

1 个答案:

答案 0 :(得分:1)

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

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