关键词搜索

源码搜索 ×
×

Python的类和继承

发布2022-03-26浏览346次

详情内容

推荐教程

Python基础教程|xin3721自学网ul li id=itemtitlePython3 从入门到精通视频教程/li /ul ul li class=description Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),icon-default.png?t=M276https://www.xin3721.com/eschool/pythonxin3721/

一、类的封装:

  • 封装将类的信息隐藏在类内部,不允许外部直接修改该类的变量,只能通过该类提供的方法来实现对隐藏信息的操作和访问
  1. class Boss():
  2. # 类的公共属性
  3. level=1
  4. # 类的初始化(构造方法),在类实例化时自动调用。
  5. def __init__(self,name,hp,sp,atk):
  6. self.name = name
  7. self.hp = hp
  8. self.sp = sp
  9. self.atk = atk
  10. # 创建类的方法,Boss被击中时HP减少
  11. def boss_hp_reduce(self,hero_atk):
  12. # 被击中时HP减少
  13. self.hp -= hero_atk
  14. print("Boss受到了%d点伤害" % hero_atk)
  15. print("Boss现在的生命为%d" % self.hp)
  16. # 攻击到hero时,heroHP减少
  17. def boss_attack(self,hero_hp):
  18. hero_hp -= self.atk
  19. print("Hero受到了%d点伤害" % self.atk)
  20. print("Hero现在的血量为%d" % hero_hp)
  21. # 当Boss魔力值充满时,释放大招
  22. def boss_sp_full(self):
  23. print("Boss:哈哈,我放大招了")
  24. print("Hero被击飞!受到了99999伤害")
  25. print("Hero阵亡了")
  26. # 设定hero的属性,同样可以使用类封装,但是我懒得弄了
  27. hero_atk = 100
  28. hero_hp = 1000
  29. # 创建一个实例
  30. boss = Boss("icedemon",10000,5,350)
  31. # 调用实例的方法
  32. boss.boss_hp_reduce(hero_atk)
  33. boss.boss_attack(hero_hp)
  34. boss.boss_sp_full()

输出结果如下:

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

二、类的继承:

  • 从父类继承,继承可以让子类从父类获取特征(属性和方法)
  • 在面向对象的世界中,从父类继承,就可以直接拥有父类的属性和方法,这样可以减少代码,多复用,子类可以定义自己的属性和方法
  1. class Enemy():
  2. def __init__(self,name,hp,atk):
  3. self.name = name
  4. self.hp = hp
  5. self.atk = atk
  6. def attack(self):
  7. print("%s发起攻击,hero受到了%d点伤害!" % (self.name,self.atk))
  8. # 继承Enemy类
  9. class Enemy2(Enemy):
  10. pass
  11. # 创建实例
  12. enemy = Enemy("毛毛虫",10,2)
  13. enemy1 = Enemy2("小鸡",100,10)
  14. enemy.attack()
  15. enemy1.attack()
  16. 父类:Enemy就是Enemy2的父类,也成为基类,超类
  17. 子类:Enemy2就是Enemy的子类,也成为派生类
  18. 如果未定义时,等同于继承object,在Python中,object是所有类的父类

运行结果

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

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

  1. 如果子类继承父类不做初始化,那么会自动继承父类属性。
     
  2. 如果子类继承父类做了初始化,且不调用super初始化父类构造函数,那么子类不会自动继承父类的属性。
     
  3. 如果子类继承父类做了初始化,且调用了super初始化了父类的构造函数,那么子类也会继承父类的属性。
  1. class Enemy():
  2. def __init__(self):
  3. self.name = "蜜蜂"
  4. self.level = 1
  5. def summary(self):
  6. print("%s,等级为%d" % (self.name,self.level))
  7. # 一般来说子类做了初始化就不能继承父类的属性,但可以利用super函数
  8. class Enemy2(Enemy):
  9. def __init__(self):
  10. self.name = "蜘蛛"
  11. self.level = 5
  12. super().__init__()
  13. # 已经初始化的子类不再继承父类的属性,已经存在的方法也是
  14. class Enemy3(Enemy):
  15. def __init__(self):
  16. self.name = "蝴蝶"
  17. self.level = 2
  18. def summary(self):
  19. print("%s,等级为%d" % (self.name,self.level))
  20. enemy = Enemy()
  21. enemy2 = Enemy2()
  22. enemy3 = Enemy3()
  23. enemy.summary()
  24. enemy2.summary()
  25. enemy3.summary()

输出结果:

  1. >>> 蜜蜂,等级为1
  2. >>> 蜜蜂,等级为1
  3. >>> 蝴蝶,等级为2

PYTHON-REPL 复制 全屏

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载