根据条件将请求传递给不同的类Python

问题描述 投票:0回答:1

我正在设计一个API,用于处理不同类型的车辆,例如汽车,公共汽车和货车。有一个端点POST /vehicle将采用已定义的主体。

{
'registration': 'str',
'date_of_purchase': 'datetime str',
'vehicle_type': 'car'
...
}

我们要做的第一件事是根据vehicle_type加载对象。

if body[vehicle_type] == 'car':
   passed_in_vehicle = Car(body)
elif body['vehicle_type'] == 'bus':
   passed_in_vehicle = Bus(body)
...

在python程序中,有多个类,包括:

  • vehicles.py
  • cars.py
  • vans.py
  • buses.py

API入口点进入Vehicles.py,它执行一些逻辑,然后根据输入将其路由到其他类之一以执行更具体的逻辑。

每个类具有相同的基本方法集。

  • update_vehicle_specs
  • register_vehicle

目前在Vehicles.py的底部,我有

if is_instance(passed_in_vehicle, Car):
   carService = Cars()
   carService.register_vehicle(passed_in_vehicle)
elif is_instance(passed_in_vehicle, Van):
   vanService = Vans()
   vanService.register_vehicle(passed_in_vehicle)
...

但是,这不能扩展。根据条件路由到特定类的正确解决方案是什么?

python
1个回答
0
投票

我不知道使用本地语言是否理想,但是至少我相信它会比您当前的解决方案更好地扩展:

  • 使用字符串名称从将存储导入模块的内置locals()实例化类
class car(object):
    def print():
        print("I'm a car")
class bus(object):
    def print():
        print("I'm a bus")

vehicle_type = "car"
currV = locals()[vehicle_type]
#vehicle_subclass_instance.register_vehicle
currV.print()

vehicle_type = "bus"
currV = locals()[vehicle_type]
#vehicle_subclass_instance.register_vehicle
currV.print()

输出:

I'm a car
I'm a bus
© www.soinside.com 2019 - 2024. All rights reserved.