"""
这段代码是检查汽车是否启动,其中pump method好像不起作用,要让pressure>0,车子才能启动,应该怎么修改
"""
class Car:
def __init__(self,VIN,engine,tires):
self.VIN=VIN
self.engine=engine
self.tires=tires
class Tires:
def __init__(self,size):
self.size=size
self.pressure=0
def get_pressure(self):
return self.pressure
def pump(self,psi):
self.pressure=psi
class Engine:
def __init__(self,fuel_type):
self.fuel_type=fuel_type
self.state='off'
def start(self):
self.state = 'on'
def stop(self):
self.state = 'off'
def get_state(self):
return self.state
city_tires=Tires(15)
off_road_tires=Tires(18)
electric_engine=Engine('electric')
petrol_engine=Engine('petrol')
city_car=Car('111A',electric_engine,city_tires)
all_terrain_car=Car('888S',petrol_engine,off_road_tires)
print('All-terrain car engine is', all_terrain_car.engine.get_state())
all_terrain_car.tires.pump(10)
all_terrain_car.engine.start()
print('All-terrain car engine is', all_terrain_car.engine.get_state())
all_terrain_car.engine.stop()
print('All-terrain car engine is', all_terrain_car.engine.get_state())
all_terrain_car.engine.start()
print('All-terrain car engine is', all_terrain_car.engine.get_state())
print(all_terrain_car.tires.get_pressure())
print('City car engine is', city_car.engine.get_state())
city_car.engine.start()
print('City car engine is', city_car.engine.get_state())
city_car.engine.stop()
print('City car engine is', city_car.engine.get_state())
class Car:
def __init__(self,VIN,engine,tires):
self.VIN=VIN
self.engine=engine
self.tires=tires
self.engine.tires=tires#动态给这辆车的引擎添加关联的轮胎,因为要判断胎压,需要在引擎中检查胎压,建立联系
class Tires:
def __init__(self,size):
self.size=size
self.pressure=0
def get_pressure(self):
return self.pressure
def pump(self,psi):
self.pressure=psi
class Engine:
def __init__(self,fuel_type):
self.fuel_type=fuel_type
self.state='off'
def start(self):
if self.tires.pressure>0:#这里获取动态添加的引擎关联的轮胎胎压进行判断
self.state = 'on'
def stop(self):
self.state = 'off'
def get_state(self):
return self.state
city_tires=Tires(15)
off_road_tires=Tires(18)
electric_engine=Engine('electric')
petrol_engine=Engine('petrol')
city_car=Car('111A',electric_engine,city_tires)
all_terrain_car=Car('888S',petrol_engine,off_road_tires)
print('All-terrain car engine is', all_terrain_car.engine.get_state())
all_terrain_car.tires.pump(10)
all_terrain_car.engine.start()
print('All-terrain car engine is', all_terrain_car.engine.get_state())
all_terrain_car.engine.stop()
print('All-terrain car engine is', all_terrain_car.engine.get_state())
all_terrain_car.engine.start()
print('All-terrain car engine is', all_terrain_car.engine.get_state())
print(all_terrain_car.tires.get_pressure())
print('City car engine is', city_car.engine.get_state())
city_car.engine.start()
print('City car engine is', city_car.engine.get_state())
city_car.engine.stop()
print('City car engine is', city_car.engine.get_state())
你题目的解答代码如下:
"""
这段代码是检查汽车是否启动,其中pump method好像不起作用,要让pressure>0,车子才能启动,应该怎么修改
"""
class Car:
def __init__(self,VIN,engine,tires):
self.VIN=VIN
self.engine=engine
self.tires=tires
self.engine.car = self
class Tires:
def __init__(self,size):
self.size=size
self.pressure=0
def get_pressure(self):
return self.pressure
def pump(self,psi):
self.pressure=psi
class Engine:
def __init__(self,fuel_type):
self.fuel_type=fuel_type
self.state='off'
self.car = None
def start(self):
if self.car.tires.get_pressure()>0:
self.state = 'on'
def stop(self):
self.state = 'off'
def get_state(self):
return self.state
city_tires=Tires(15)
off_road_tires=Tires(18)
electric_engine=Engine('electric')
petrol_engine=Engine('petrol')
city_car=Car('111A',electric_engine,city_tires)
all_terrain_car=Car('888S',petrol_engine,off_road_tires)
print('All-terrain car engine is', all_terrain_car.engine.get_state())
all_terrain_car.tires.pump(10)
all_terrain_car.engine.start()
print('All-terrain car engine is', all_terrain_car.engine.get_state())
all_terrain_car.engine.stop()
print('All-terrain car engine is', all_terrain_car.engine.get_state())
all_terrain_car.engine.start()
print('All-terrain car engine is', all_terrain_car.engine.get_state())
print(all_terrain_car.tires.get_pressure())
print('City car engine is', city_car.engine.get_state())
city_car.engine.start()
print('City car engine is', city_car.engine.get_state())
city_car.engine.stop()
print('City car engine is', city_car.engine.get_state())
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
"""
这段代码是检查汽车是否启动,其中pump method好像不起作用,要让pressure>0,车子才能启动,应该怎么修改
"""
class Car:
def __init__(self, VIN, engine, tires):
self.VIN = VIN
self.engine = engine
self.tires = tires
if(self.tires.get_pressure()>0):
self.engine.start()
class Tires:
def __init__(self, size):
self.size = size
self.pressure = 0
def get_pressure(self):
return self.pressure
def pump(self, psi):
self.pressure = psi
class Engine:
def __init__(self, fuel_type):
self.fuel_type = fuel_type
self.state = 'off'
def start(self):
self.state = 'on'
def stop(self):
self.state = 'off'
def get_state(self):
return self.state
city_tires = Tires(15)
off_road_tires = Tires(18)
electric_engine = Engine('electric')
petrol_engine = Engine('petrol')
city_car = Car('111A', electric_engine, city_tires)
all_terrain_car = Car('888S', petrol_engine, off_road_tires)
print('All-terrain car engine is', all_terrain_car.engine.get_state())
all_terrain_car.tires.pump(10)
all_terrain_car.engine.start()
print('All-terrain car engine is', all_terrain_car.engine.get_state())
all_terrain_car.engine.stop()
print('All-terrain car engine is', all_terrain_car.engine.get_state())
all_terrain_car.engine.start()
print('All-terrain car engine is', all_terrain_car.engine.get_state())
print(all_terrain_car.tires.get_pressure())
print('City car engine is', city_car.engine.get_state())
city_car.engine.start()
print('City car engine is', city_car.engine.get_state())
city_car.engine.stop()
print('City car engine is', city_car.engine.get_state())
标题是Composition 和 Inheritance,结果你用的是Aggregation。
Composition 中类与类的关系是强相关,Aggregation是弱相关,所以你这里可以单独调用引擎的方法,而与轮胎的压力没有任何关系。
如果打个比喻的话,轮胎可以拆下来单独增压,使用弱相关的类聚合没有问题,而引擎单独拆下来发动不了啊,所以它的启动和暂停应该在Car类中定义。当然,用继承也做得到。
class Car:
def __init__(self,VIN,engine,tires):
self.VIN=VIN
self.engine=Engine(engine)
self.tires=Tires(tires)
def start(self):
if self.tires.pressure>0:
self.engine.state='on'
def stop(self):
self.engine.state='off'
class Tires:
def __init__(self,size):
self.size=size
self.pressure=0
def get_pressure(self):
return self.pressure
def pump(self,psi):
self.pressure=psi
class Engine:
def __init__(self,fuel_type):
self.fuel_type=fuel_type
self.state='off'
# def start(self):
# self.state = 'on'
# def stop(self):
# self.state = 'off'
def get_state(self):
return self.state
# city_tires=Tires(15)
# off_road_tires=Tires(18)
# electric_engine=Engine('electric')
# petrol_engine=Engine('petrol')
city_car=Car('111A','electric',15)
all_terrain_car=Car('888S','petrol',18)
print('All-terrain car engine is', all_terrain_car.engine.get_state())
all_terrain_car.tires.pump(10)
# all_terrain_car.engine.start()
all_terrain_car.start()
print('All-terrain car engine is', all_terrain_car.engine.get_state())
# all_terrain_car.engine.stop()
all_terrain_car.stop()
print('All-terrain car engine is', all_terrain_car.engine.get_state())
# all_terrain_car.engine.start()
all_terrain_car.start()
print('All-terrain car engine is', all_terrain_car.engine.get_state())
print(all_terrain_car.tires.get_pressure())
print('City car engine is', city_car.engine.get_state())
# city_car.engine.start()
city_car.start()
print('City car engine is', city_car.engine.get_state())
# city_car.engine.stop()
city_car.stop()
print('City car engine is', city_car.engine.get_state())
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!