Python的类和继承

一、类的封装:

  • 封装将类的信息隐藏在类内部,不允许外部直接修改该类的变量,只能通过该类提供的方法来实现对隐藏信息的操作和访问
class Boss():
    # 类的公共属性
    level=1
    
    # 类的初始化(构造方法),在类实例化时自动调用。
    def __init__(self,name,hp,sp,atk):
        self.name = name
        self.hp = hp
        self.sp = sp
        self.atk = atk
    
    # 创建类的方法,Boss被击中时HP减少
    def boss_hp_reduce(self,hero_atk):
        # 被击中时HP减少
        self.hp -= hero_atk
        print("Boss受到了%d点伤害" % hero_atk)
        print("Boss现在的生命为%d" % self.hp)

    # 攻击到hero时,heroHP减少
    def boss_attack(self,hero_hp):
        hero_hp -= self.atk
        print("Hero受到了%d点伤害" % self.atk)
        print("Hero现在的血量为%d" % hero_hp)

    # 当Boss魔力值充满时,释放大招
    def boss_sp_full(self):
        print("Boss:哈哈,我放大招了")
        print("Hero被击飞!受到了99999伤害")
        print("Hero阵亡了")

 # 设定hero的属性,同样可以使用类封装,但是我懒得弄了  
hero_atk = 100
hero_hp = 1000

 # 创建一个实例
boss = Boss("icedemon",10000,5,350)

 # 调用实例的方法
boss.boss_hp_reduce(hero_atk)
boss.boss_attack(hero_hp)
boss.boss_sp_full()

输出结果如下:

>>> Boss受到了100点伤害
>>> Boss现在的生命为9900
>>> Hero受到了350点伤害
>>> Hero现在的血量为650
>>> Boss:哈哈,我放大招了
>>> Hero被击飞!受到了99999伤害
>>> Hero阵亡了 

二、类的继承:

  • 从父类继承,继承可以让子类从父类获取特征(属性和方法)
  • 在面向对象的世界中,从父类继承,就可以直接拥有父类的属性和方法,这样可以减少代码,多复用,子类可以定义自己的属性和方法
class Enemy():
    def __init__(self,name,hp,atk):
        self.name = name
        self.hp = hp
        self.atk = atk

    def attack(self):
        print("%s发起攻击,hero受到了%d点伤害!" % (self.name,self.atk))

 # 继承Enemy类
class Enemy2(Enemy):
	pass
 
 # 创建实例
enemy = Enemy("毛毛虫",10,2)
enemy1 = Enemy2("小鸡",100,10)
enemy.attack()
enemy1.attack()
父类:Enemy就是Enemy2的父类,也成为基类,超类
子类:Enemy2就是Enemy的子类,也成为派生类
如果未定义时,等同于继承object,在Python中,object是所有类的父类

运行结果

>>> 毛毛虫发起攻击,hero受到了2点伤害!
>>> 小鸡发起攻击,hero受到了10点伤害!

三、类的继承之Super()函数

  1. 如果子类继承父类不做初始化,那么会自动继承父类属性。
  2. 如果子类继承父类做了初始化,且不调用super初始化父类构造函数,那么子类不会自动继承父类的属性。
  3. 如果子类继承父类做了初始化,且调用了super初始化了父类的构造函数,那么子类也会继承父类的属性。
class Enemy():
    def __init__(self):
        self.name = "蜜蜂"
        self.level = 1
    def summary(self):
        print("%s,等级为%d" % (self.name,self.level))

# 一般来说子类做了初始化就不能继承父类的属性,但可以利用super函数
class Enemy2(Enemy):
    def __init__(self):
        self.name = "蜘蛛"
        self.level = 5
        super().__init__()

# 已经初始化的子类不再继承父类的属性,已经存在的方法也是        
class Enemy3(Enemy):
    def __init__(self):
        self.name = "蝴蝶"
        self.level = 2
    def summary(self):
        print("%s,等级为%d" % (self.name,self.level))

enemy = Enemy()
enemy2 = Enemy2()
enemy3 = Enemy3()

enemy.summary()
enemy2.summary()
enemy3.summary()

输出结果:

>>> 蜜蜂,等级为1
>>> 蜜蜂,等级为1
>>> 蝴蝶,等级为2
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » Python的类和继承