huyuhang-pythonday08

# 面向对象三大特性: 封装, 继承, 多态
# 继承: 类与类之间产生的关系
# 子类 自动拥有(继承) 父类 的所有 方法 和 属性  (非私有)

好处

  • 子类 继承自 父类,可以直接 享受 父类中已经封装好的方法,不需要再次开发
  • 子类 中应该根据 职责,封装 子类特有的 属性和方法
  • 当 父类 的方法实现不能满足子类需求时,可以对方法进行 重写(override)
    举个栗子
    不使用继承编写圆类和矩形类的计算

class Circle():
    def __init__(self, r, color):
        self.r = r
        self.color = color
    def area(self):
        return 3.14*self.r*self.r
    def show_color(self):
        print(f"color = {self.color}")
class Rectangle():
    def __init__(self, h, w, color):
        self.h = h
        self.w = w
        self.color = color

    def area(self):
        return self.h*self.w

    def show_color(self):
        print(f"color = {self.color}")

c1 = Circle(10, "red")
print(c1.area())
c1.show_color()
rect1 = Rectangle(3, 4, "black")
print(rect1.area())
rect1.show_color()

使用继承

class 子类(父类):
		pass

使用继承

# 父类
class Shape(object):
    def __init__(self, color):
        self.color = color
    def area(self):
        return None
    def show_color(self):
        print(f"color = {self.color}")
class Circle(Shape):
    def __init__(self, r, color):
        # 对父类属性进行初始化
        super().__init__(color)
        self.r = r
    def area(self):
        return 3.14*self.r*self.r
class Rectangle(Shape):
    def __init__(self, h, w, color):
        super().__init__(color)
        self.h = h
        self.w = w

    def area(self):
        return self.h*self.w

c1 = Circle(10, "red")
print(c1.area())
c1.show_color()
rect1 = Rectangle(3, 4, "black")
print(rect1.area())
rect1.show_color()

鲁班打大龙

from random import randint
class Hero:
    def __init__(self, name, blood, strength):
        self.name = name
        self.blood = blood
        self.strength = strength
    def calc_health(self):
        return self.blood
    def take_damage(self, monster):
        dmage = randint(monster.strength - 5, monster.strength + 5)
        self.blood -= dmage
        print(f"{self.name}你被{monster.name}攻击,受到了{str(dmage)}点伤害!还剩{str(self.blood)}滴血")
        if self.calc_health() <= 0:
            print(f"{self.name}你被杀死了!胜败乃兵家常事 请重新来过。")
            return True
        else:
            return False
class Monster:
    def __init__(self, name, blood, strength):
        self.name = name
        self.blood = blood
        self.strength = strength

    def calc_health(self):
        return self.blood

    def take_damage(self, hero):
        dmage = randint(hero.strength - 5, hero.strength + 5)
        self.blood -= dmage
        print(f"{self.name}你被{hero.name}攻击,受到了{str(dmage)}点伤害!还剩{str(self.blood)}滴血")
        if self.calc_health() <= 0:
            print(f"{self.name}你被杀死了!胜败乃兵家常事 请重新来过。")
            return True
        else:
            return False

hero1 = Hero("小鲁班", 200, 50)
monster1 = Monster("大龙", 1000, 10)
while True:
    is_moster_died = monster1.take_damage(hero1)
    if is_moster_died:
        break
    is_hero_died = hero1.take_damage(monster1)
    if is_hero_died:
        break

继承版本

from random import randint
class Sprite(object):
    def __init__(self, blood, strength):
        self.blood = blood
        self.strength = strength

    def calc_health(self):
        return self.blood
    def take_damage(self, sprite):
        dmage = randint(sprite.strength - 5, sprite.strength + 5)
        self.blood -= dmage
        print(f"{self.name}你被{sprite.name}攻击,受到了{str(dmage)}点伤害!还剩{str(self.blood)}滴血")
        if self.calc_health() <= 0:
            print(f"{sprite.name}你被杀死了!胜败乃兵家常事 请重新来过。")
            return True
        else:
            return False
class Hero(Sprite):
    def __init__(self, name, blood, strength):
        super().__init__(blood, strength)
        self.name = name

class Monster(Sprite):
    def __init__(self, name, blood, strength):
        super().__init__(blood, strength)
        self.name = name

hero1 = Hero("小鲁班", 200, 50)
monster1 = Monster("大龙", 1000, 10)
while True:
    is_moster_died = monster1.take_damage(hero1)
    if is_moster_died:
        break
    is_hero_died = hero1.take_damage(monster1)
    if is_hero_died:
        break

python异常处理

程序在运行时,如果 Python 解释器 遇到 到一个错误,会停止程序的执行,并且提示一些错误信息,这就是 异常
程序停止执行并且提示错误信息 这个动作,我们通常称之为:抛出(raise)异常

捕获异常

在程序开发中,如果 对某些代码的执行不能确定是否正确,可以增加 try(尝试) 来 捕获异常
捕获异常最简单的语法格式:

try:
    尝试执行的代码
except:
    出现错误的处理
  • try 尝试,下方编写要尝试代码,不确定是否能够正常执行的代码
  • except 如果不是,下方编写尝试失败的代码
age = input("请输入您的年龄")
try:
    age = int(age)
except:
    age = -1
if age >= 18:
    print("恭喜你成年了, 可以网吧了")
elif age >=0 and age < 18:
    print("对不起, 你还是个宝宝")
elif age == -1:
    print("你输入的格式不正确")

抛出异常


def input_password():
    pwd = input("请输入密码")
    if len(pwd) >= 8 :
        return pwd
    ex = Exception("密码长度不够")
    raise ex

try:
    u_pwd = input_password()
    print(u_pwd)
except Exception as result:
    print(f"发现错误{result}")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值