推荐教程
一、类的封装:
- 封装将类的信息隐藏在类内部,不允许外部直接修改该类的变量,只能通过该类提供的方法来实现对隐藏信息的操作和访问
- 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()函数
- 如果子类继承父类不做初始化,那么会自动继承父类属性。
- 如果子类继承父类做了初始化,且不调用super初始化父类构造函数,那么子类不会自动继承父类的属性。
- 如果子类继承父类做了初始化,且调用了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
PYTHON-REPL 复制 全屏