Python趣味课程:果果饮料店新品鉴赏

今天翻了之前的python面向对象的基础案例,发现一个很有趣的需求。差不多涵盖了面向对象的所有知识点。先记录一下。

需求:

题目:品尝饮料
1. 当输入 咖啡时,控制台显示:咖啡:苦

2. 如果没有该种饮料,控制台显示:     对不起!没有您输入的饮料类型。

 推荐实现步骤:

1、建立一个python类Drink,应当做如下:
a、声明一个方法taste(),该方法负责输出饮料的味道;
 
2、建立Drink的具体子类:
a、分别建立Drink的子类:Coffee(代表咖啡),Beer(代表啤酒),Milk(代表牛奶);
b、实现taste()方法,要求在控制台打印各自的味道特征。

3、建立异常类DrinkNotFoundException
a、继承Exception
b、在Drink的方法getDrink(int drinkType)中声明引发DrinkNotFoundException异常,当传入的参数没有相对应的饮料类型时,抛出异常。
c、在使用getDrink方法的类中捕捉该异常。

4、建立Test测试模块,测试以上内容的正确性:

声明一个方法getDrink(),该方法负责输出饮料的类型
a、编写main方法,通过命令行传参的方式传入某种饮料的类型。
 b、在main方法中,调用getDrink方法,获得相应的饮料对象。注意捕获DrinkNotFoundException。
c、然后调用该饮料对象的taste()方法,输出该饮料的味道。
5、编译程序,并运行。

涉及到的知识点:

  1. 类的创建与函数的定义
  2. 继承关系,函数的重写特性
  3. 简单工厂模式
  4. 自定义异常,异常的捕获与抛出

实现代码:

class  DrinkNotFoundException(Exception):
    def __init__(self,value):
        self.__value = value
    def __str__(self):
        return repr(self.__value)


class Drink(object):
    def taste(self):
        return
class Coffee(Drink):
    def taste(self):
       return '咖啡:苦'

class Beer(Drink):
    def taste(self):
       return '啤酒:爽'

class Milk(Drink):
    def taste(self):
       return '牛奶:甜'


#  简单工厂模式    传入一个int或者是字符串类型的参数,可以根据判断,得到某一个类子类当中对应的对象。
# 减轻了调用者的难度,可以通过某一个条件直接返回对象。
# 缺点:后期增加新的饮品时就需要对于方法进行新的升级和改版,在python当中改版升级可以使用装饰器

# 比如 :果果饮料城又有了新产品,果汁-4  返回果汁的对象   使用装饰器怎样完成。
def getDrink(drinktype):
    if drinktype == '1':
        return Coffee()
    elif drinktype =='2':
        return Beer()
    elif drinktype =='3':
        return Milk()
    else:
        raise DrinkNotFoundException('对不起,没有相应的饮品!')

if __name__ == '__main__':
    # 传入int类型的数据获取到响应的对象
    while True:
        print('请输入您需要的饮品的类型,咖啡-1,啤酒-2,牛奶-3,退出-0')
        type = input()
        if type == '0':
            print('感谢您的使用,谢谢购买!!')
            break

        try:
            d = getDrink(type)
            print(d.taste())
        except DrinkNotFoundException as e:
            print(e)

代码虽简单,但是涉及知识比较广,能够作为面向对象的综合案例题目。

感谢您的阅读~

你可能感兴趣的:(Python学习笔记)