面向对象编程——实战1

文章目录

案例一、构建一个银联信用卡的类

属性:

  • 顾客姓名
  • 信用卡授权额度
  • 当前额度
  • 单次刷卡金额上限

方法

  • 分别获得上面属性的方法
  • 对授权额度进行修改的方法
  • 对单次刷卡金额上限进行修改的方法
  • 实现刷卡的方法——传入一个刷卡金额,判断是否超过单次刷卡上限以及当前金额是否够用,如果够用,则执行刷卡,将当前额度减去刷卡金额
class UnionPayGreditCard():
    """构建银联信用卡类"""

    def __init__(self, name, limit, current_limit, single_limit):
        """初始化银联银行卡的所有属性"""
        self.name = name
        self.limit = limit
        self.current_limit = current_limit
        self.single_limit = single_limit

    def get_name(self):
        """获得顾客的名字"""
        return self.name

    def get_limit(self):
        """获得信用卡授权额度"""
        return self.limit

    def set_limit(self, new_limit):
        """对授权额度进行修改"""
        self.limit = new_limit
        print("你的授权额度修改为{}元".format(self.limit))
        return self.limit

    def get_current_limit(self):
        """获得信用卡当前额度"""
        return self.current_limit

    def get_single_limit(self):
        """获得单次刷卡金额上限"""
        return self.single_limit

    def set_single_limit(self, new_single_limit):
        """修改单次刷卡金额上限"""
        self.single_limit = new_single_limit
        print("你的单次刷卡金额上限修改为{}元".format(self.single_limit))

    def use_card(self, cost):
        """刷卡"""
        if cost <= self.single_limit and cost <= self.current_limit:
            self.limit -= cost
            print("你本次消费{}元,信用卡剩余{}元".format(cost, self.limit))
        else:
            print("你的消费无法支付,请查看额度")

# 创建信用卡实例,并执行调用相应的属性与方法
def main():
    # 实例化
    card = UnionPayGreditCard("Doggei",10000,5000,1000)

    # 获取属性
    name = card.get_name()
    limit = card.get_limit()
    current_linit = card.get_current_limit()
    single_limit = card.get_single_limit()
    print("name:{},\tlimit:{},\tcurrent_limit:{},\tsingle_limit:{}".
          format(name,limit,current_linit,single_limit))
    # 执行
    card.set_limit(20000)
    card.set_single_limit(10000)
    card.use_card(1000)
    card.use_card(150000)

if __name__ == '__main__':
    main()

name:Doggei,	limit:10000,	current_limit:5000,	single_limit:1000
你的授权额度修改为20000元
你的单次刷卡金额上限修改为10000元
你本次消费1000元,信用卡剩余19000元
你的消费无法支付,请查看额度

案例二:构造中国银行信用卡类

继承银联信用卡的类,并构造中国银行信用卡的类

  • 实现对银联信用卡的继承
  • 新增属性,中国银行信用卡积分、优惠商店列表
  • 重写刷卡方法:传入消费店铺名称和消费金额,如果店铺名称在优惠商店列表内,则刷卡金额打95折;每消费10元,信用卡积分增加1分;保留父类刷卡方法的其他功能
  • 新增如下方法:获取用户积分的方法;设置优惠店铺列表的方法
class UnionPayCreditCard():
    """构建银联信用卡类"""

    def __init__(self, name, limit, current_limit, single_limit):
        """初始化银联银行卡的所有属性"""
        self.name = name
        self.limit = limit
        self.current_limit = current_limit
        self.single_limit = single_limit

    def get_name(self):
        """获得顾客的名字"""
        return self.name

    def get_limit(self):
        """获得信用卡授权额度"""
        return self.limit

    def set_limit(self, new_limit):
        """对授权额度进行修改"""
        self.limit = new_limit
        print("你的授权额度修改为{}元".format(self.limit))
        return self.limit

    def get_current_limit(self):
        """获得信用卡当前额度"""
        return self.current_limit

    def get_single_limit(self):
        """获得单次刷卡金额上限"""
        return self.single_limit

    def set_single_limit(self, new_single_limit):
        """修改单次刷卡金额上限"""
        self.single_limit = new_single_limit
        print("你的单次刷卡金额上限修改为{}元".format(self.single_limit))

    def use_card(self, cost):
        """刷卡"""
        if cost <= self.single_limit and cost <= self.current_limit:
            self.limit -= cost
            print("你本次消费{}元,信用卡剩余多少元".format(cost, self.limit))
        else:
            print("你的消费无法支付,请查看额度")


class BankOfChinaCreditCard(UnionPayCreditCard):
    """中国银行信用卡的类,继承自银联信用卡的类"""
    def __init__(self,name, limit, current_limit, single_limit,integral,discount_shop):
        """初始化中国银行信用卡的所有属性"""
        super().__init__(name, limit, current_limit, single_limit)
        self.integral = integral
        self.discount_shop = discount_shop

    def use_card(self,shop_name,cost):
        """方法的重写"""
        if cost <= self.single_limit and cost <= self.current_limit \
                and shop_name in self.discount_shop:
            self.limit -= cost*0.95
            self.integral += cost//10
            print("你本次消费{}元,优惠{}元,信用卡剩余{}元,获得积分{},共有积分{}".
                  format(cost*0.95,cost*0.05, self.limit,cost//10,self.integral))
        else:
            print("你的消费无法支付,请查看额度")

    def get_integral(self):
        """获取用户积分"""
        return self.integral

    def set_discount_shop(self,new_shop_name):
        """设置优惠商店列表的方法"""
        self.discount_shop.append(new_shop_name)
        return self.discount_shop

def main():
    """创建实例并执行"""
    card = BankOfChinaCreditCard("Doggei",10000,5000,1000,0,
                                 ["小米旗舰店","华为旗舰店","惠普旗舰店"])
    # 获取属性
    name = card.get_name()
    limit = card.get_limit()
    current_linit = card.get_current_limit()
    single_limit = card.get_single_limit()
    integral = card.get_integral()
    print("name:{},\tlimit:{},\tcurrent_limit:{},\tsingle_limit:{},integral:{}\t".
          format(name, limit, current_linit, single_limit,integral))
    # 执行
    card.set_limit(20000)
    card.set_single_limit(10000)
    card.use_card("小米旗舰店",1000)
    card.use_card("华为旗舰店",150000)

if __name__ == '__main__':
    main()


name:Doggei,	limit:10000,	current_limit:5000,	single_limit:1000,integral:0	
你的授权额度修改为20000元
你的单次刷卡金额上限修改为10000元
你本次消费950.0元,优惠50.0元,信用卡剩余19050.0元,获得积分100,共有积分100
你的消费无法支付,请查看额度
上一篇:java设计模式-单例模式


下一篇:【转载】System_Verilog打印格式