python中的abstractmethod(python中的//是什么意思)

网友投稿 254 2022-08-29


python中的abstractmethod(python中的//是什么意思)

# -*- coding: utf-8 -*-from abc import ABC ,abstractclassmethodfrom collections import namedtupleCustomer = namedtuple('Customer','name fidelity')class lineItem: """初始化明细行:产品、数量、单价""" def __init__(self,product,qty,price): self.product = product self.qty = qty self.price = price def total(self): return self.price*self.qtyclass Order: """客户、购物车、 促销活动""" def __init__(self, customer, cart, promotion=None): self.customer = customer self.cart = list(cart) self.promotion = promotion def total(self): """hasattr:用法:判断是否包含对应的属性""" if not hasattr(self,'__total'): self.__total = sum(item.total() for item in self.cart) #计算购物车里总金额 return self.__total def due(self): if self.promotion is None: discount=0 else: discount = self.promotion.discount(self) return self.total()-discount def __repr__(self): fmt = '' return fmt.format(self.total(),self.due())class Promotion(ABC): #策略 抽象基类 """ @abstractmethod:抽象方法,含abstractmethod方法的类不能实例化,继承了含abstractmethod方法的子类必须复写所有abstractmethod装饰的方法,未被装饰的可以不重写 @ property:方法伪装属性,方法返回值及属性值,被装饰方法不能有参数,必须实例化后调用,类不能调用 @ classmethod:类方法,可以通过实例对象和类对象调用,被该函数修饰的方法第一个参数代表类本身常用cls,被修饰函数内可调用类属性,不能调用实例属性 @staticmethod:静态方法,可以通过实例对象和类对象调用,被装饰函数可无参数,被装饰函数内部通过类名.属性引用类属性或类方法,不能引用实例属性 """ @abstractclassmethod def discount(self,order): """返回折扣金额、"""class FidelityPromo(Promotion): #策略1 """积分为1000或以上的客户提供5%的折扣""" def discount(self,order): return order.total()*0.05 if order.customer.fidelity>=1000 else 0class BulkItemPromo(Promotion):#策略2 """单个商品为20个或以上时提供10%的折扣""" def discount(self,order): discount = 0 for item in order.cart: if item.quantity>=20: discount+=item.total()*0.1 return discountclass LargeOrderPromo(Promotion):#策略3 """订单中不同商品达到10个或以上时提供7%的折扣""" def discount(self, order): discount_items = {item.product for item in order.cart} if len(discount_items)>=10: return order.total()*0.07 return 0

心有猛虎,细嗅蔷薇


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:python中的 sql语句用法(python中的数据类型有哪些)
下一篇:SpringBoot+WebSocket实现多人在线聊天案例实例
相关文章

 发表评论

暂时没有评论,来抢沙发吧~