# -*- coding: utf-8 -*-
__author__ = 'liangchao'
__date__ = '202018/7/5 15:53'
import abc
'''
抽象方法
工厂模式
需求:定义一个Car基类,Car产生日系车,德系车,中国车
'''
class Car(metaclass=abc.ABCMeta):
def __init__(self, name ,tyre, engine, face):
self._name = name
self._tyre = tyre
self._engine = engine
self._face = face
def __str__(self):#作用是打印你这个对象时,就是它的名字
return self._name
@abc.abstractmethod
def fire(self):
raise NotImplementedError
@abc.abstractmethod
def run(self):
raise NotImplementedError
class JapeneseCar(Car):
def __init__(self,name, tyre, engine,face):
Car.__init__(self,name,tyre,engine,face)
#因为你继承了抽象的父类,而且他有那个抽象方法,强制你的子类也必须要写这些方法
def fire(self):
print(f"{self._name}汽车开始点火了")
def run(self):
print(f"{self._name}汽车开始启动了")
class GemanyCar(Car):
def __init__(self,name, tyre, engine,face):
Car.__init__(self,name,tyre,engine,face)
#因为你继承了抽象的父类,而且他有那个抽象方法,强制你的子类也必须要写这些方法
def fire(self):
print(f"{self._name}汽车开始点火了")
def run(self):
print(f"{self._name}汽车开始启动了")
class ChineseCar(Car):
def __init__(self,name, tyre, engine,face):
Car.__init__(self,name,tyre,engine,face)
#因为你继承了抽象的父类,而且他有那个抽象方法,强制你的子类也必须要写这些方法
def fire(self):
print(f"{self._name}汽车开始点火了")
def run(self):
print(f"{self._name}汽车开始启动了")
'''
定义一个汽车工场
'''
car_type_dict = {
0:ChineseCar,
1:GemanyCar,
2:JapeneseCar
}
class CarFactory(object):#这个工场与Car没有继承关系
def __init__(self,name="法拉利"):
self._name = name
self._car_list = []#建立一个场
def create_car(self,car_name="中国",ty_name="马牌",en_name="中国",face = "红色",type=3):
car = car_type_dict[type](car_name,ty_name,en_name,face)
self._car_list.append(car)
print("创建{car_name},{}")#这是另一种字符串拼接
@property
def car_list(self):
return self._car_list
def car_compertion(self,car):
car.fire()
car.run()
def competion(self):
[self.car_competion(car) for car in self._car_list]
if __name__ == "__main__":
# car = JapeneseCar('本田','米其林','Turbor','红色')
# car.fire()
car_fac = CarFactory
car_fac.create_car()
car_fac.create_car('本田','米其林','Turbor','红色',2)
car_fac.create_car()
print("#####################3")
for car in car_fac.car_list:
print(car)