【多态】【多态案例演练】【异常的完整用法】【异常的传递】【异常的抛出 raise,密码长度不够提示】

多态

多态
面向对象三大特性

封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中
定义类的准则
继承 实现代码的重用,相同的代码不需要重复的编写
设计类的技巧
子类针对自己特有的需求,编写特定的代码
多态 不同的 子类对象 调用相同的 父类方法,产生不同的执行结果

多态 可以 增加代码的灵活度
以 继承 和 重写父类方法 为前提
是调用方法的技巧,不会影响到类的内部设计
在这里插入图片描述

多态案例演练

需求

在 Dog 类中封装方法 game
普通狗只是简单的玩耍
定义 XiaoTianDog 继承自 Dog,并且重写 game 方法
哮天犬需要在天上玩耍
定义 Person 类,并且封装一个 和狗玩 的方法
在方法内部,直接让 狗对象 调用 game 方法
在这里插入图片描述
案例小结

Person 类中只需要让 狗对象 调用 game 方法,而不关心具体是 什么狗
game 方法是在 Dog 父类中定义的
在程序执行时,传入不同的 狗对象 实参,就会产生不同的执行效果
多态 更容易编写出出通用的代码,做出通用的编程,以适应需求的不断变化!

class Dog(object):
    def __init__(self, name):
        self.name = name
    def game(self):
        print("%s 蹦蹦跳跳的玩耍..." % self.name)
class XiaoTianDog(Dog):

    def game(self):
        print("%s 飞到天上去玩耍..." % self.name)
class Person(object):
    def __init__(self, name):
        self.name = name
    def game_with_dog(self, dog):
        print("%s 和 %s 快乐的玩耍..." % (self.name, dog.name))
        # 让狗玩耍
        dog.game()

# 1. 创建一个狗对象
# wangcai = Dog("旺财")
wangcai = XiaoTianDog("飞天旺财")

# 2. 创建一个小明对象
xiaoming = Person("小明")

# 3. 让小明调用和狗玩的方法
xiaoming.game_with_dog(wangcai)

在这里插入图片描述
传送值
在这里插入图片描述

异常

目标
异常的概念
捕获异常
异常的传递
抛出异常

异常的概念

程序在运行时,如果 Python 解释器 遇到 到一个错误,会停止程序的执行,并且提示一些错误信息,这就是 异常
程序停止执行并且提示错误信息 这个动作,我们通常称之为:抛出(raise)异常
异常捕获完整语法
在实际开发中,为了能够处理复杂的异常情况,完整的异常语法如下:
提示:

有关完整语法的应用场景,在后续学习中,结合实际的案例会更好理解
现在先对这个语法结构有个印象即可
else 只有在没有异常时才会执行的代码
finally 无论是否有异常,都会执行的代码

#异常 就是判断你遇到的问题,第一个问题,第二问题,第三个问题?其他
try:
    a = int(input("请输入数字"))
    b =  10 / a
    print(b)
except ValueError:
    print("请你输入整数")
except ZeroDivisionError:
    print("不能输入 0 请重新输入")
except Exception as qita:
    print("%s 越到其他问题请联系管理员" % qita )

else:
    print("没有发生问题")
finally:
    print("不管有没有遇到问题,我都会执行,可能答案不正确")

图片详解
在这里插入图片描述
运行结果 查询
在这里插入图片描述

异常的传递

异常的传递 —— 当 函数/方法 执行 出现异常,会 将异常传递 给 函数/方法 的 调用一方
如果 传递到主程序,仍然 没有异常处理,程序才会被终止
语法
需求

定义函数 demo1() 提示用户输入一个整数并且返回
定义函数 demo2() 调用 demo1()
在主程序中调用 demo2()

#异常 调用 异常
def dme1():
    return  int(input("请输入一个整数"))
def dme2():
    return dme1()
try:
    print(dme2())
except ValueError:
    print("请你输入一个整数")
except Exception as qita:
    print("%s 未知错误 请返回给管理员" % qita)

在这里插入图片描述

异常的抛出 raise

4.1 应用场景
在开发中,除了 代码执行出错 Python 解释器会 抛出 异常之外
还可以根据 应用程序 特有的业务需求 主动抛出异常
示例

提示用户 输入密码,如果 长度少于 8,抛出 异常
在这里插入图片描述需求

定义 input_password 函数,提示用户输入密码
如果用户输入长度 < 8,抛出异常
如果用户输入长度 >=8,返回输入的密码

# 异常的 抛出
#定义 input_password 函数,提示用户输入密码
# 如果用户输入长度 < 8,抛出异常
# 如果用户输入长度 >=8,返回输入的密码

def passwod():
    pwd = input("请输入密码")

    if len(pwd) >= 8:
        return  pwd
    ex = Exception("密码长度不够")
    raise  ex

try:
    user = passwod()  #  追踪  一定义一个名 等于 pass()
    print(user)
except Exception as result:
    print("发现错误:%s" % result)

图片详解
在这里插入图片描述
运行测试
密码长度大于 8
在这里插入图片描述
密码长度小于8

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值