添加 6.py
This commit is contained in:
parent
319f1be9c3
commit
126795a8ca
138
6.py
Normal file
138
6.py
Normal file
@ -0,0 +1,138 @@
|
||||
class Product:
|
||||
def __init__(self, product_id, name, base_price):
|
||||
# 封装基本属性
|
||||
self._product_id = product_id
|
||||
self._name = name
|
||||
self._base_price = base_price
|
||||
|
||||
@property
|
||||
def product_id(self):
|
||||
return self._product_id
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
return self._name
|
||||
|
||||
@property
|
||||
def base_price(self):
|
||||
return self._base_price
|
||||
|
||||
def calculate_price(self, quantity=1):
|
||||
"""计算商品价格(基础实现)"""
|
||||
return self._base_price * quantity
|
||||
|
||||
def display_info(self):
|
||||
"""显示商品信息"""
|
||||
return f"{self._name} (ID: {self._product_id}) - ${self._base_price:.2f}"
|
||||
|
||||
|
||||
class DigitalProduct(Product):
|
||||
def __init__(self, product_id, name, base_price, license_type):
|
||||
super().__init__(product_id, name, base_price)
|
||||
# 添加数字商品特有属性
|
||||
self._license_type = license_type
|
||||
|
||||
@property
|
||||
def license_type(self):
|
||||
return self._license_type
|
||||
|
||||
def calculate_price(self, quantity=1):
|
||||
"""数字商品价格计算(无数量折扣)"""
|
||||
# 数字商品购买数量只能是1
|
||||
return self._base_price
|
||||
|
||||
|
||||
class PhysicalProduct(Product):
|
||||
def __init__(self, product_id, name, base_price, weight):
|
||||
super().__init__(product_id, name, base_price)
|
||||
# 添加实体商品特有属性
|
||||
self._weight = weight
|
||||
|
||||
@property
|
||||
def weight(self):
|
||||
return self._weight
|
||||
|
||||
def calculate_price(self, quantity=1):
|
||||
"""实体商品价格计算(有批量折扣)"""
|
||||
if quantity >= 10:
|
||||
return self._base_price * quantity * 0.9 # 10件以上9折
|
||||
return self._base_price * quantity
|
||||
|
||||
|
||||
class ShoppingCart:
|
||||
def __init__(self):
|
||||
# 使用字典存储商品和数量 {product: quantity}
|
||||
self._items = {}
|
||||
|
||||
def add_item(self, product, quantity=1):
|
||||
"""添加商品到购物车"""
|
||||
if not isinstance(product, Product):
|
||||
raise ValueError("只能添加Product类型商品")
|
||||
|
||||
if product in self._items:
|
||||
self._items[product] += quantity
|
||||
else:
|
||||
self._items[product] = quantity
|
||||
|
||||
def remove_item(self, product, quantity=1):
|
||||
"""从购物车移除商品"""
|
||||
if product in self._items:
|
||||
if self._items[product] <= quantity:
|
||||
del self._items[product]
|
||||
else:
|
||||
self._items[product] -= quantity
|
||||
|
||||
def calculate_total(self):
|
||||
"""计算购物车总价"""
|
||||
total = 0
|
||||
for product, quantity in self._items.items():
|
||||
total += product.calculate_price(quantity)
|
||||
return total
|
||||
|
||||
def display_cart(self):
|
||||
"""显示购物车内容"""
|
||||
if not self._items:
|
||||
print("购物车是空的")
|
||||
return
|
||||
|
||||
print("购物车内容:")
|
||||
for product, quantity in self._items.items():
|
||||
price = product.calculate_price(quantity)
|
||||
print(f"- {product.name} × {quantity}: ${price:.2f}")
|
||||
print(f"总计: ${self.calculate_total():.2f}\n")
|
||||
|
||||
|
||||
# 使用示例
|
||||
if __name__ == "__main__":
|
||||
# 创建商品
|
||||
book = PhysicalProduct("B001", "Python编程书", 39.99, 0.5)
|
||||
movie = DigitalProduct("D001", "科幻电影", 12.99, "永久")
|
||||
headphone = PhysicalProduct("E001", "无线耳机", 89.99, 0.2)
|
||||
|
||||
# 创建购物车
|
||||
cart = ShoppingCart()
|
||||
|
||||
# 添加商品
|
||||
cart.add_item(book, 2)
|
||||
cart.add_item(movie)
|
||||
cart.add_item(headphone, 3)
|
||||
|
||||
# 显示购物车
|
||||
cart.display_cart()
|
||||
|
||||
# 测试移除商品
|
||||
print("移除一副耳机...")
|
||||
cart.remove_item(headphone)
|
||||
cart.display_cart()
|
||||
|
||||
# 测试批量折扣
|
||||
print("添加10本书...")
|
||||
cart.add_item(book, 10)
|
||||
cart.display_cart()
|
||||
|
||||
# 显示商品信息
|
||||
print("\n商品详细信息:")
|
||||
print(book.display_info())
|
||||
print(movie.display_info())
|
||||
print(f"耳机重量: {headphone.weight}kg")
|
||||
print(f"电影授权类型: {movie.license_type}")
|
Loading…
x
Reference in New Issue
Block a user