class product:
def __init__(self, ID: str, name: str, price: int, man_name: str) -> None:
self.id = ID
self.name = name
self.price = price
self.man_name = man_name
# get the string representation of the product
def __str__(self) -> str:
return "Product ID:\t\t" + self.id + "\nProduct Name:\t\t" + \
self.name + "\nProduct Price:\t\t" + str(self.price) + \
"\nManufacturer Name:\t" + self.man_name
# compare if the two products are the same
def __eq__(self, b) -> bool:
if self.id == b.id and self.name == b.name and \
self.price == b.price and self.man_name == b.man_name:
return True
return False
# the same way ne method
def __ne__(self, b) -> bool:
if self.id != b.id or self.name != b.name or \
self.price != b.price or self.man_name != b.man_name:
return True
return False
# we override the __hash__ magic method which is useful in sets
# if two elements have same hash they are equal
def __hash__(self):
return hash(self.id)
# get the id of the product
def getID(self):
return self.id
# get the name of the product
def getName(self):
return self.name
# get the price of the product
def getPrice(self):
return self.price
# get the manufacturer name
def getManufacturerName(self):
return self.man_name
if __name__ == '__main__':
prodList = [
product('d', 'e', 2, 'f'),
product('a', 'b', 1, 'c'),
product('m', 'n', 5, 'o'),
product('p', 'q', 6, 'r'),
product('j', 'k', 4, 'l'),
product('s', 't', 7, 'u'),
product('g', 'h', 3, 'i'),
product('v', 'w', 8, 'x'),
]
pricesort = sorted(prodList, key = lambda a: a.price)
# for prod in pricesort:
# print(prod)
# print("==========================")
# print("-----------------------------------------------------")
# revpricesort = sorted(prodList, key = lambda a: a.price)[::-1]
# for prod in revpricesort:
# print(prod)
# print("==========================")
prodListB = [
product('a', 'b', 8, 'c'),
product('m', 'n', 56, 'o'),
product('aa', 'bb', 45, 'c'),
product('bb', 'ds', 65, 'o'),
product('zz', 'vv', 71, 'c'),
product('ff', 'df', 59, 'o'),
]
# implement the append part
# implement the slicing part
prodList.extend(prodListB)
print(hash(prodList[1]) == hash(prodListB[0]))
print(len(set([prodList[1], prodListB[0]])))
Y2xhc3MgcHJvZHVjdDoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBJRDogc3RyLCBuYW1lOiBzdHIsIHByaWNlOiBpbnQsIG1hbl9uYW1lOiBzdHIpIC0+IE5vbmU6CiAgICAgICAgc2VsZi5pZCA9IElECiAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgIHNlbGYucHJpY2UgPSBwcmljZQogICAgICAgIHNlbGYubWFuX25hbWUgPSBtYW5fbmFtZQogICAgCiAgICAjIGdldCB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwcm9kdWN0CiAgICBkZWYgX19zdHJfXyhzZWxmKSAtPiBzdHI6CiAgICAgICAgcmV0dXJuICJQcm9kdWN0IElEOlx0XHQiICsgc2VsZi5pZCArICJcblByb2R1Y3QgTmFtZTpcdFx0IiArIFwKICAgICAgICAgICAgc2VsZi5uYW1lICsgIlxuUHJvZHVjdCBQcmljZTpcdFx0IiArIHN0cihzZWxmLnByaWNlKSArIFwKICAgICAgICAgICAgICAgICJcbk1hbnVmYWN0dXJlciBOYW1lOlx0IiArIHNlbGYubWFuX25hbWUKICAgIAogICAgIyBjb21wYXJlIGlmIHRoZSB0d28gcHJvZHVjdHMgYXJlIHRoZSBzYW1lCiAgICBkZWYgX19lcV9fKHNlbGYsIGIpIC0+IGJvb2w6CiAgICAgICAgaWYgc2VsZi5pZCA9PSBiLmlkIGFuZCBzZWxmLm5hbWUgPT0gYi5uYW1lIGFuZCBcCiAgICAgICAgICAgIHNlbGYucHJpY2UgPT0gYi5wcmljZSBhbmQgc2VsZi5tYW5fbmFtZSA9PSBiLm1hbl9uYW1lOgogICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgIHJldHVybiBGYWxzZQogICAgCiAgICAjIHRoZSBzYW1lIHdheSBuZSBtZXRob2QKICAgIGRlZiBfX25lX18oc2VsZiwgYikgLT4gYm9vbDoKICAgICAgICBpZiBzZWxmLmlkICE9IGIuaWQgb3Igc2VsZi5uYW1lICE9IGIubmFtZSBvciBcCiAgICAgICAgICAgIHNlbGYucHJpY2UgIT0gYi5wcmljZSBvciBzZWxmLm1hbl9uYW1lICE9IGIubWFuX25hbWU6CiAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgcmV0dXJuIEZhbHNlCgogICAgIyB3ZSBvdmVycmlkZSB0aGUgX19oYXNoX18gbWFnaWMgbWV0aG9kIHdoaWNoIGlzIHVzZWZ1bCBpbiBzZXRzCiAgICAjIGlmIHR3byBlbGVtZW50cyBoYXZlIHNhbWUgaGFzaCB0aGV5IGFyZSBlcXVhbAogICAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgICAgIHJldHVybiBoYXNoKHNlbGYuaWQpCgogICAgIyBnZXQgdGhlIGlkIG9mIHRoZSBwcm9kdWN0CiAgICBkZWYgZ2V0SUQoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuaWQKCiAgICAjIGdldCB0aGUgbmFtZSBvZiB0aGUgcHJvZHVjdAogICAgZGVmIGdldE5hbWUoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYubmFtZQogICAgCiAgICAjIGdldCB0aGUgcHJpY2Ugb2YgdGhlIHByb2R1Y3QKICAgIGRlZiBnZXRQcmljZShzZWxmKToKICAgICAgICByZXR1cm4gc2VsZi5wcmljZQoKICAgICMgZ2V0IHRoZSBtYW51ZmFjdHVyZXIgbmFtZQogICAgZGVmIGdldE1hbnVmYWN0dXJlck5hbWUoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYubWFuX25hbWUKCmlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICBwcm9kTGlzdCA9IFsgCiAgICAgICAgcHJvZHVjdCgnZCcsICdlJywgMiwgJ2YnKSwKICAgICAgICBwcm9kdWN0KCdhJywgJ2InLCAxLCAnYycpLAogICAgICAgIHByb2R1Y3QoJ20nLCAnbicsIDUsICdvJyksCiAgICAgICAgcHJvZHVjdCgncCcsICdxJywgNiwgJ3InKSwKICAgICAgICBwcm9kdWN0KCdqJywgJ2snLCA0LCAnbCcpLAogICAgICAgIHByb2R1Y3QoJ3MnLCAndCcsIDcsICd1JyksCiAgICAgICAgcHJvZHVjdCgnZycsICdoJywgMywgJ2knKSwKICAgICAgICBwcm9kdWN0KCd2JywgJ3cnLCA4LCAneCcpLAogICAgXQoKICAgIHByaWNlc29ydCA9IHNvcnRlZChwcm9kTGlzdCwga2V5ID0gbGFtYmRhIGE6IGEucHJpY2UpCiAgICAjIGZvciBwcm9kIGluIHByaWNlc29ydDoKICAgICMgICAgIHByaW50KHByb2QpCiAgICAjICAgICBwcmludCgiPT09PT09PT09PT09PT09PT09PT09PT09PT0iKQogICAgCiAgICAjIHByaW50KCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpCiAgICAjIHJldnByaWNlc29ydCA9IHNvcnRlZChwcm9kTGlzdCwga2V5ID0gbGFtYmRhIGE6IGEucHJpY2UpWzo6LTFdCiAgICAjIGZvciBwcm9kIGluIHJldnByaWNlc29ydDoKICAgICMgICAgIHByaW50KHByb2QpCiAgICAjICAgICBwcmludCgiPT09PT09PT09PT09PT09PT09PT09PT09PT0iKQoKICAgIHByb2RMaXN0QiA9IFsKICAgICAgICBwcm9kdWN0KCdhJywgJ2InLCA4LCAnYycpLAogICAgICAgIHByb2R1Y3QoJ20nLCAnbicsIDU2LCAnbycpLAogICAgICAgIHByb2R1Y3QoJ2FhJywgJ2JiJywgNDUsICdjJyksCiAgICAgICAgcHJvZHVjdCgnYmInLCAnZHMnLCA2NSwgJ28nKSwKICAgICAgICBwcm9kdWN0KCd6eicsICd2dicsIDcxLCAnYycpLAogICAgICAgIHByb2R1Y3QoJ2ZmJywgJ2RmJywgNTksICdvJyksCiAgICBdCiAgICAKICAgICMgaW1wbGVtZW50IHRoZSBhcHBlbmQgcGFydAoKICAgICMgaW1wbGVtZW50IHRoZSBzbGljaW5nIHBhcnQKCiAgICBwcm9kTGlzdC5leHRlbmQocHJvZExpc3RCKQogICAgcHJpbnQoaGFzaChwcm9kTGlzdFsxXSkgPT0gaGFzaChwcm9kTGlzdEJbMF0pKQogICAgcHJpbnQobGVuKHNldChbcHJvZExpc3RbMV0sIHByb2RMaXN0QlswXV0pKSkK