# -*- 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)