Как реализовать абстрактную модель в 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))
]
но мне это не нравится: если я это сделаю, мне придется менять свой класс "Гараж" каждый раз, когда я создаю новый класс "Автомобиль"... Я хочу, чтобы мой класс "Гараж" управлял транспортными средствами, независимо от того, какой это тип транспортных средств. является. Является ли это возможным?
1 ответ
В Spyne 2.12.1-бета выходной полиморфизм должен работать (если он включен для выходного протокола) с Array(Vehicle)
синтаксис.
Пожалуйста, посмотрите рабочий пример здесь: https://github.com/arskom/spyne/blob/a2d0edd3be5bc0385548f5212b7b4b6d674fd610/examples/xml/polymorphic_array.py