python - 用于任务管道的 Python 模式
问题描述
我正在尝试在汽车对象上创建一个简单的管道
- 制造汽车的轮子
- 给汽车加刹车
- 存放汽车
我为此任务开发的代码是:
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'}
。有没有我可以使用的模式来为汽车和brakes
属性生成 JSON 并封装上述管道?我可以创建一个名为的新类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'}
但这对于一个看似简单的问题来说似乎太过分了?
解决方案
你有几个选择。
一是调整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
推荐阅读
- c - 在 /proc/meminfo 中,哪些条目对应于 page in/out 和 swap in/out?
- c - 如何使用 sscanf 输入多个单词?
- python - 遍历 pandas 中整个列的字典列表
- reactjs - 如何更改 Ract MUI 中的默认 IconButton?
- sql-server - 我在使用存储过程创建的数据集时遇到问题。语法如下,错误是“将数据类型 varchar 转换为 datetime 时出错”
- c# - WPF 扩展器标题背景颜色未在 Windows Server 2019 中显示
- node.js - 将文件名推送到数组,然后将它们写入文本文件
- android - 首先按字母顺序对对象数组进行排序,然后按数字排序
- r - 结果的错误列数不是R中向量长度(arg 1)的倍数
- javascript - 如何在 ES5 javascript 中为对象创建组