【问题标题】:Python pattern for a pipeline of tasks用于任务管道的 Python 模式
【发布时间】:2020-08-13 11:35:14
【问题描述】:

我正在尝试在汽车对象上创建一个简单的管道

  1. 制造汽车的轮子
  2. 为汽车添加刹车
  3. 存放汽车

我为此任务开发的代码是:

def build_brakes(car) :
    car.brakes = 'new high quality brakes'
    return car
        
class Car :
    def __init__(self , wheels):
        self.wheels = wheels
        self.jsonTransform = {}
        self.jsonTransform['wheels'] = wheels
        
    def toJson(self):
        return self.jsonTransform

def store(car):
    return 'car' , car , 'stored'
    
c = Car("wheels")
print(c.toJson())

car_with_brakes = build_brakes(c)
print(car_with_brakes.toJson())

stored = store(c)
print(stored)

哪些打印:

{'wheels': 'wheels'}
{'wheels': 'wheels'}
('car', <__main__.Car object at 0x7f40a86bdcf8>, 'stored')

print(car_with_brakes.toJson()) 行打印 {'wheels': 'wheels'}。有没有我可以使用的模式来生成汽车的 JSON 和 brakes 属性并封装上述管道?我可以创建一个名为CarWithBrakes 的新类,例如:

class CarWithBrakes(Car):
    
    def __init__(self , car, brakes):
        self.car = car
        self.brakes = brakes

    def toJson(self):
        self.jsonTransform = {}
        self.jsonTransform['wheels'] = self.car.wheels
        self.jsonTransform['brakes'] = self.car.brakes
        return self.jsonTransform
    
car_with_brakes = CarWithBrakes(c , 'new high qualiy brakes')

car_with_brakes.toJson()

哪个打印:

{'wheels': 'wheels', 'brakes': 'new high qualiy brakes'}

但这对于一个看似简单的问题来说似乎太过分了?

【问题讨论】:

    标签: python design-patterns


    【解决方案1】:

    您有多种选择。

    一是调整build_brakes功能:

    # note brakes x breaks
    def build_brakes(car) :
        car.brakes = 'new high quality brakes'
        car.jsonTransform['breaks'] = car.brakes
        return car
    

    另一个(IMO 更干净)是修改toJson 方法:

    # note brakes x breaks
    class Car :
        def __init__(self , wheels):
            self.wheels = wheels
        def toJson(self):
            ret = {'wheels':self.wheels}
            if hasattr(self,"brakes"):
                ret['breaks'] = self.brakes
            return ret
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-02
      • 2021-03-28
      • 1970-01-01
      相关资源
      最近更新 更多