我正在创建的是一种商店。我可以使用多个参数将产品对象添加到所说的商店(也是一个对象),包括标题(字符串),描述(字符串)和product_number(整数)。
我想创建一个函数,该函数将一个字符串作为参数,该字符串可用于搜索库存(列表)中所有产品对象的标题和描述参数,查找匹配项(部分和全部,这无关紧要在这种情况下),请将那些匹配的对象附加到名为search_results的列表中,并按它们的product_number对其进行升序排序,然后将其返回给用户。
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的附加类,用于创建我前面提到的产品对象,为简洁起见,为避免混淆,我没有将其包括在内。
我的主要问题(有几个,我知道)是我无法使product_search函数正常工作。也就是说,即使我给出产品名称的确切大小写和拼写,它也总是还原“ else”大小写并返回“ Not Found”。
我在这方面做错了什么?
根据__eq__
,您可能需要为product
类实现功能docs
对于列表,元组,集合,frozenset,dict或collections.deque等容器类型,表达式
x in y
等效于any(x is e or x == e for e in y)
。
in
运算符不起作用的原因是该类没有实现__eq__
函数,因此Python不知道如何比较对象实例(要比较的属性,...)
阅读有关__eq__
的更多信息
示例:
__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)