Как записать в CSV-файл и узнать, что аренда активна?

#python #python-3.x #class

#python #python-3.x #класс

Вопрос:

Мне нужно создать базовую программу для аренды транспортных средств. У меня есть класс Aluguer , который получает следующие атрибуты:

  1. начало аренды
  2. ник пользователя
  3. название транспортного средства
  4. почасовая стоимость аренды
 import time
now = time.time()

class Aluguer:
    def __init__(self, inicio, nickname, nome, preco_base):
        self.__inicio = inicio
        self.__nickname = nickname
        self.__nome = nome
        self.__preco_base = preco_base

    @property
    def inicio(self):
        self.__inicio = now
        return self.__inicio

    @property
    def nickname(self):
        return self.__nickname

    @property
    def nome(self):
        return self.__nome

    @property
    def preco_base(self):
        return self.__preco_base
 

Чтобы рассчитать начальное время аренды, могу ли я просто сделать то, что я только что сделал в:

 @property
def inicio(self):
    self.__inicio = now
    return self.__inicio
 

Затем я должен выполнить метод обновления, который добавляет или обновляет (если они уже существуют) два новых атрибута Aluguer объекта: прошедшее время и цена.

Я написал следующее:

 def update(self):
    tempo_fim = time.time()
    elapsed_seconds = tempo_fim - self.__inicio
    price = self.__preco_base
    valor = (elapsed_seconds / 3600) * price
 

Когда пользователь вернет транспортное средство, update метод будет выполнен, и информация будет записана в файл csv. После регистрации в файле объект будет удален из системы памяти.

Как я могу это сделать и как я могу узнать, активна ли аренда?

Комментарии:

1. Добро пожаловать в StackOverflow. Указывает ли одно из ваших свойств, что аренда активна? Или, может быть, комбинация?

2. Если вы удаляете объект по окончании аренды, тот факт, что он существует, указывает на то, что аренда активна, не так ли? Как вы отслеживаете свои транспортные средства?

3. Когда пользователь арендует транспортное средство, создается объект Aluguer со следующими атрибутами (время начала, ник пользователя, название транспортного средства и цена за час).

Ответ №1:

Поскольку это выглядит как длительный процесс, я бы использовал структуру как таковую:

 
import csv
import Aluguer

class Rentals:
    def __init__(self):
        self.rentals = {}
        
    def start_rental(self, inicio, nickname, nome, preco_base):
        new_rental = Aluguer(inicio, nickname, nome, preco_base, rental_id)
        rental_id = str(id(new_rental))
        self.rentals[rental_id] = new_rental
        rental.inicio()
        return rental_id
    
    def return_rental(self, rental_id):
        rental = self.rentals[rental_id]
        rental.update()
        file_name = "Dummy.csv"
        with open(file_name, 'w') as f:
            writer = csv.DictWriter(f, fieldnames=rental.__dict__.keys())
            writer.writeheader()
            for data in rental.__dict__:
                writer.writerow(data)

 

Вы определяете класс rentals , который содержит все активные аренды, с start_rental помощью функции, которая определяет аренду и инициализирует ее, и return_rental функции, которая обновляет ее и записывает в csv. Поэтому все активные — это те, которые есть в rentals.rentals списке.

** Приведенный выше код не является функциональным и полным, просто индикатор

Комментарии:

1. Но моя аренда определяется временем начала, ником пользователя, названием транспортного средства и ценой за час. Где я собираюсь это использовать?

2. Я обновил функцию start_rental, поэтому она создает новую аренду

3. В def return_rental(self, rental) как мне вызвать rental для возврата? В списке аренды у меня может быть несколько арендных ставок одновременно.

4. На вашем месте я бы добавил unique_id / booking_number и т. Д. для аренды и ссылки на нее по имени, позвольте мне добавить его в код

5. Смотрите обновление, теперь при выполнении start_rental a rental_id возвращается, и когда вы хотите его остановить, вы return_rental вызываете rental_id