#类的多态的运用
#汽车类
class Car(object):
def move(self):
print("move ...")
#汽车商店类
class CarStore(object):
#预定汽车
def order(self,car_type):
#注意,只有运行时,python才会检查是否存在selectCar()方法,意味着只要子类有这个方法就可以了,定义的时候,不写也是可以的,语法检查太差了
return self.selectCar(car_type)
#挑选汽车
def selectCar(self):
print("father function().. ")
#工厂类
class Factory(object):
def createCar(self):
pass
class BMWFactory(Factory):
def createCar(self,car_type):
if car_type == "BMW1":
return BMW1Car()
elif car_type == "BMW2":
return BMW2Car()
#宝马汽车店
class BMW_CarStore(CarStore):
#BMW_CarStore继承了CarStore,CarStore中有selectCar方法,但是两者函数签名都不一样,python仍然重写了这个方法
#通过测试,直接调用selectCar(void),提示没有这个方法,说明虽然函数签名不同,但是selectCar(()方法的确重写了
def selectCar(self,car_type):
return BMWFactory().createCar(car_type)
#宝马型号1
class BMW1Car(Car):
pass
#宝马型号2
class BMW2Car(Car):
pass
store = BMW_CarStore()
#报错
#store.selectCar()
car = store.order("BMW1")
car.move()