Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 23, 2018 16:19:40

VasiliyArmavir
Зарегистрирован: 2018-09-27
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Не много ли классов я создал? Можно ли упростить код ?

Разработать систему «Автобаза».
Диспетчер распределяет заявки на Рейсы между Водителями и назначает для этого Автомобиль.
Водитель может сделать заявку на ремонт. Диспетчер может отстранить Водителя от работы.
Водитель делает отметку о выполнении Рейса и состоянии Автомобиля.

 class Car:
    """Cars in CarPark"""
    model = None
    category = None
    tonnaj = 0
    mesto = 0
    repair = True
    def __init__(self, model, category, tonnaj, mesto):
        """ Variable definition"""
        self.model = model
        self.category = category
        self.tonnaj = tonnaj
        self.mesto = mesto
class Reys:
    """Trip information"""
    gruz = 0
    name = None
    passengers = 0
    parking = False
    def __init__(self, gruz, name, passengers):
        """ Variable definition"""
        self.gruz = gruz
        self.name = name
        self.passengers = passengers
class Voditel:
    """Driver information"""
    name_driver = None
    category = None
    disqualify = False
    free = False
    def __init__(self, name_driver, category):
        """ Variable definition"""
        self.name_driver = name_driver
        self.category = category
    def remont(self, car):
        """ Repair need"""
        car.repair = False
        print("По машине {}, водитель {} запросил ремонт".format(car.model, self.name_driver))
    def report_car(self, car):
        """ When reys ends, driver report about car"""
        if car.repair is True:
            print("Водитель {} отчитался, что автомобиль {} в норме".format(self.name_driver, car.model))
        else:
            print("Водитель {} отчитался, что автомобиль {} поломан".format(self.name_driver, car.model))
    def start_reys(self, reys, car):
        """ Reys begin"""
        self.free = False
        reys.parking = True
        car.repair = True
        print("Водитель {}, на машине {}, начал рейс {}".format(self.name_driver, car.model, reys.name))
    def end_reys(self, reys, car):
        """ Reys end"""
        reys.parking = False
        car.repair = True
        self.free = True
        print("Водитель {}, на машине {}, закончил рейс {}".format(self.name_driver, car.model, reys.name))
class Operator:
    def remove_voditel(self, voditel):
        voditel.disqualify = True
        print("Водитель {}, пьян после обеда и отстранен от работы".format(voditel.name_driver))
    def new_reys(self, reys, park_drivers, new_cars):
        for car in new_cars:
            if car.tonnaj >= reys.gruz and car.repair and car.mesto >= reys.passengers:
                my_car = car
        for voditel in park_drivers:
            if my_car.category in voditel.category and not voditel.disqualify and not voditel.free:
                new_voditel = voditel
        return new_voditel, my_car
voditel_first = Voditel(name_driver="Sergey", category=["DE", "D1E"])
voditel_second = Voditel(name_driver="Stepan", category=["B", "C"])
park_drivers = [voditel_first, voditel_second]
bus = Car(model="Bogdan", category="C", tonnaj=2000, mesto=10, )
trailer = Car(model="Scania", category="D1E", tonnaj=20000, mesto=2)
new_cars = [bus, trailer]
operator = Operator()
food_reys = Reys(gruz=50, name="Lunch break", passengers=8)
new_voditel, my_car = operator.new_reys(reys=food_reys, park_drivers=park_drivers, new_cars=new_cars)
new_voditel.start_reys(reys=food_reys, car=my_car)
new_voditel.end_reys(reys=food_reys, car=my_car)
new_voditel.report_car(car=my_car)
work_reys = Reys(name="Road repair", passengers=2, gruz=15000)
new_voditel, my_car = operator.new_reys(reys=work_reys, park_drivers=park_drivers, new_cars=new_cars)
new_voditel.start_reys(reys=work_reys, car=my_car)
new_voditel.end_reys(reys=work_reys, car=my_car)
new_voditel.remont(car=my_car)
operator.remove_voditel(new_voditel)

Офлайн

#2 Окт. 23, 2018 20:21:52

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

Не много ли классов я создал? Можно ли упростить код ?

> Не много ли классов я создал? Можно ли упростить код?

Не много, но сделал ты их не правильно.
1) Не надо создавать атрибуты класса и потом их переопределять.
2) Не существует класса для заявки
3) У класса Reys должны быть атрибуты с временем начала и продолжительностью рейса.
4) За водителем должна закрепляться машина, по этому он должен агрегировать экземпляр класса Car.
5) Водителю должен назначаться рейс, по этому он должен агрегировать экземпляр класса Reys.
6) Записью voditel.disqualify = True ты отправляешь всех водителей в вытрезвитель. Не надо так делать!



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#3 Окт. 23, 2018 20:59:10

VasiliyArmavir
Зарегистрирован: 2018-09-27
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Не много ли классов я создал? Можно ли упростить код ?

Спасибо. Буду разбираться

Офлайн

#4 Окт. 23, 2018 21:57:53

VasiliyArmavir
Зарегистрирован: 2018-09-27
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Не много ли классов я создал? Можно ли упростить код ?

1. Атрибуты классов убрал
2. Класс заявки сделал.
3. атрибуты по времени сделал
4. Не совсем пойму что тут и в следующем совете мне надо сделать (можно на моем примере показать)?
6. Тут я мануально использую в мною выбранном рейсе этот метод. Согласен, не очень правильно. Но мне надо показать что такая возможность есть. Вот я и показал :-)

Офлайн

#5 Окт. 25, 2018 14:44:11

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

Не много ли классов я создал? Можно ли упростить код ?

> 4. Не совсем пойму что тут и в следующем совете мне надо сделать (можно на моем примере показать)?

Агрегация это когда один объект содержит другие объекты.

 class Voditel:
    def setAvto(self, avto):
        self._avto = avto
 
    def getAvto(self):
        return self._avto



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#6 Окт. 26, 2018 10:20:24

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Не много ли классов я создал? Можно ли упростить код ?

VasiliyArmavir Если в вашем классе всего один метод __init__ то класс вам не нужен. Классы Car и Reys содержат только метод __init__ , их можно вполне заменить словарями.
Класс Operator не содержит никаких данных, только методы которые оперируют передаными аргументами. Следовательно он тоже не нужен, а методы можно заменить простыми процедурами.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version