Как я могу провести поиск, используя частичную строку, чтобы найти список объектов со строковыми параметрами и найти искомый объект в Python? - PullRequest
0 голосов
/ 16 января 2020

Я создаю тип магазина. Я могу добавить объекты товара в указанное хранилище (также объект) с несколькими параметрами, включая заголовок (строка), описание (строка) и номер_продукта (целое число).

Я хотел бы создать функцию, которая принимает в качестве параметра строку, которую можно использовать для поиска параметров заголовка и описания всех объектов товара в инвентаре (списке), поиска соответствий (частичных и полных, в данном случае это не имеет значения), добавьте соответствующие объекты в список с именем search_results, отсортируйте их в порядке возрастания по номеру продукта и верните их пользователю.

    class Product:

        def __init__(self, code, title, desc, price, quantity):
            self._code = code
            self._title = title
            self._desc = desc
            self._price = price
            self._quantity = quantity

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

        def get_product_code(self):
            return self._code

        def get_product_title(self):
            return self._title

        def get_product_price(self):
            return self._price

        def get_product_quantity(self):
            return self._quantity

        def get_product_desc(self):
            return self._desc

    class Store:

        def __init__(self):
            self._store_inventory = []
            self._store_members = []

        def product_search(self, product_keyword):
            search_results = []
            for product in self._store_inventory:
                if product_keyword in product.get_product_title():
                    search_results.append(product)
                elif product_keyword in product.get_product_desc():
                    search_results.append(product)
                else:
                    return "Not Found"
            search_results.sort()
            return search_results

Это то, что у меня так далеко.

Основная проблема, с которой я столкнулся (я знаю, что есть несколько), заключается в том, что я не могу заставить функцию product_search работать должным образом. Таким образом, он всегда возвращает случай «else» и возвращает «Not Found», даже когда я даю точный случай и написание названия продукта.

Что я делаю неправильно в этом отношении?

1 Ответ

0 голосов
/ 16 января 2020

Возможно, вам потребуется реализовать функцию __eq__ для класса product в соответствии с документами

Для типов контейнеров, таких как list, tuple, set, frozenset, dict или collection.deque, выражение x in y эквивалентно any(x is e or x == e for e in y).

Причина, по которой ваш оператор in не работает, потому что функция __eq__ для класса не реализовано так Python не знает, как сравнивать экземпляры вашего объекта (какие свойства сравнивать, ...)

Подробнее о __eq__

Пример:

class Foo:
    def __init__(self, a):
        self.a = a

class Bar:
    def __init__(self, a):
        self.a = a

    def __eq__(self, other):
        return self.a == other.a
f1 = Foo(5)
f2 = Foo(5)
print("f1 == f2", f1 == f2)
fl = [f1,f2]
f3 = Foo(5)
print("f3 in fl", f3 in fl)

g1 = Bar(5)
g2 = Bar(5)
print("g1 == g2",g1 == g2)
gl = [g1,g2]
g3 = Bar(5)
print("g3 in gl", g3 in gl)

Выход:

f1 == f2 False
f3 in fl False
g1 == g2 True
g3 in gl True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...