Программа инвентаризации продуктов, которая принимает продукты с идентификатором, количеством и ценой и использует класс инвентаризации для отслеживания продуктов - PullRequest
0 голосов
/ 04 мая 2019

Класс Product работает нормально, но я пытаюсь выяснить, как заставить класс Inventory разделить каждый продукт на определенные категории. Я чувствую, что я близко, но всякий раз, когда я пытаюсь распечатать инвентарь, он просто показывает, где он хранится в памяти, и фактически ничего не распечатывает. Вывод, который я получаю при запуске, находится внизу. Я хочу, чтобы он распечатывал фактические продукты и данные, а не экземпляр, хранящийся в памяти.

class Product:

    def __init__(self, pid, price, quantity):
        self.pid = pid 
        self.price = price
        self.quantity = quantity

    def __str__(self):
        #Return the strinf representing the product
        return "Product ID: {}\t Price: {}\t Quantity: {}\n".format(self.pid, self.price, self.quantity)

    def get_id(self):
        #returns id 
        return self.pid

    def get_price(self):
        #returns price
        return self.price

    def get_quantity(self):
        #returns quantity
        return self.quantity

    def increase_quantity(self):
        self.quantity += 1

    def decrease_quantity(self):
        self.quantity -= 1 


    def get_value(self):
        value = self.quantity * self.price
        return 'value is {}'.format(value)


product_1 = Product('fishing', 20, 10)
product_2 = Product('apparel', 35, 20)


class Inventory:

    def __init__(self, products):
        self.products = products
        self.fishing_list = []
        self.apparel_list = []
        self.value = 0 


    def __repr__(self):
    return "Inventory(products: {}, fishing_list: {}, apparel_list: {}, value: {})".format(self.products, self.fishing_list, self.apparel_list, self.value)

    def add_fishing(self):
        for product in self.products:
            if product.get_id() == 'fishing':
                self.fishing_list.append(product)
        return '{} is in the fishing section'.format(self.fishing_list)

    def add_apparel(self):
        for product in self.products:
            if product.get_id() == 'apparel':
                self.apparel_list.append(product)
        return '{} is in the apparel section'.format(self.apparel_list)


inventory_1 = Inventory([product_1, product_2])
inventory_1.add_fishing()
print(inventory_1)

OUTPUT = Inventory (продукты: [<<strong> main . Экземпляр продукта в 0x10dbc8248>, <<strong> main . Экземпляр продукта в 0x10dbc8290>], Fishing_list: [<<strong> main . Экземпляр продукта в 0x10dbc8248>], apparel_list: [], значение: 0)

1 Ответ

0 голосов
/ 04 мая 2019

Необходимо указать способ печати объекта класса Inventory.

Для этого вам нужно реализовать хотя бы одну из следующих функций в вашем классе.

  • __repr__
  • __str__

Этот ответ помогает, какой из них вы должны использовать: https://stackoverflow.com/a/2626364/8411228

Реализация может выглядеть примерно так:

class Inventory:
    # your code ...
    def __repr__(self):
        return str(self.products) + str(self.fishing_list) + str(self.apparel_list) + str(self.value)

    # or even better with formatting
    def __repr__(self):
        return f"Inventory(products: {self.products}, fishing_list: {self.fishing_list}, apparel_list: {self.apparel_list}, value: {self.value})

Обратите внимание, что я использовал во втором примере f строк , чтобы отформатировать строку вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...