一、指名道姓的方式,不依赖于继承

示例代码如下:

class Hero:def __init__(self, nick_name, life_value, aggresivity):self.nick_name = nick_nameself.life_value = life_valueself .aggresivity = aggresivitydef attack(self, enemy):enemy.life_value -= self.aggresivityclass Garen(Hero):camp = 'Demacia'def attack(self, enemy):Hero.attack(self, enemy)print('from Garen class')class Riven(Hero):camp = 'Noxus'g1 = Garen('草丛伦', 100, 30)
r1 = Riven('锐雯雯', 80, 50)
g1.attack(r1)
print(r1.life_value)结果为:from Garen class
50

从以上结果可以看出,即执行了自己的特有方法,又执行了父类中继承的方法

想为草丛伦增加一个weapon私有属性,代码如下:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class Hero:def __init__(self, nick_name, life_value, aggresivity):self.nick_name = nick_nameself.life_value = life_valueself .aggresivity = aggresivitydef attack(self, enemy):enemy.life_value -= self.aggresivityclass Garen(Hero):camp = 'Demacia'def __init__(self, nick_name, life_value, aggresivity, weapon):self.nick_name = nick_nameself.life_value = life_valueself.aggresivity = aggresivityself.weapon = weapondef attack(self, enemy):Hero.attack(self, enemy)print('from Garen class')class Riven(Hero):camp = 'Noxus'g1 = Garen('草丛伦', 100, 30)
r1 = Riven('锐雯雯', 80, 50)
g1.attack(r1)
print(r1.life_value)结果报错:Traceback (most recent call last):File "C:/Users/xu516/PycharmProjects/Python全栈开发/第三模块/面向对象编程/12 在子类中重用父类的属性.py", line 31, in <module>g1 = Garen('草丛伦', 100, 30)
TypeError: __init__() missing 1 required positional argument: 'weapon'

报错提示缺少一个weapon位置参数,加上位置参数就可以实例化成功了,

但是发现了重复代码,怎样减少重复代码呢,可以使用

Hero.__init__(self, nick_name, life_value, aggresivity)

二、super()方法,依赖继承

 super(Garen, self).attack(enemy)super().__init__(nick_name, life_value, aggresivity)

三、super也会按照mro顺序区查找属性,

示例代码如下:

class A:def f1(self):print('from A')super().f1()class B:def f1(self):print('from B')class C(A,B):passprint(C.mro())c = C()
c.f1()结果为:[<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>]
from A
from B

可以看出,super并没有去找父类,而是安装mro顺序查找

Python面向对象子类中重用父类的属性相关推荐

  1. Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)

    Python 在子类中调用父类方法详解(单继承.多层继承.多重继承)   by:授客 QQ:1033553122   测试环境: win7 64位 Python版本:Python 3.3.5 代码实践 ...

  2. Python在子类中调用父类方法

    1.在子类中调用父类方法 super().方法名() 类名.方法名(self) spuer(要从哪一个类的上一级类开始查找, self).方法名() 子类调用父类方法时,一般都是想对父类方法进行扩展 ...

  3. python在子类中添加新的属性_pycharm实现在子类中添加一个父类没有的属性

    我就废话不多说了,还是直接看代码吧! class Car(): """一次模拟汽车的简单尝试""" def __init__(self, m ...

  4. python在子类中添加新的属性_python - 如何创建类属性?

    python - 如何创建类属性? 在python中,我可以使用@classmethod装饰器向类添加方法. 是否有类似的装饰器向类中添加属性? 我可以更好地展示我在说什么. class Exampl ...

  5. Hibernate继承(2)子类属性生成在自己的一张表中,父类的属性一张表

    Hibernate继承(2)子类属性生成在自己的一张表中,父类的属性一张表 <?xml version="1.0"?> <!DOCTYPE hibernate-m ...

  6. php访问父类的所有属性,php – 在父类中使用$this仅在子类中显示父类属性

    我有以下两个班级. BMW级延伸级轿车. class Car{ public $doors; public $wheels; public $color; public $size; public f ...

  7. 继承实现的原理、子类中调用父类的方法、封装

    一.继承实现的原来 1.继承顺序 Python的类可以继承多个类.继承多个类的时候,其属性的寻找的方法有两种,分别是深度优先和广度优先. 如下的结构,新式类和经典类的属性查找顺序都一致.顺序为D--- ...

  8. Day19:继承实现的原理、子类中调用父类的方法、封装

    一.继承实现的原来 1.继承顺序 Python的类可以继承多个类.继承多个类的时候,其属性的寻找的方法有两种,分别是深度优先和广度优先. 如下的结构,新式类和经典类的属性查找顺序都一致.顺序为D--- ...

  9. 在子类中调用父类的方法super

    1.没有super之前,在子类里面需要父类里面的逻辑,但是我们是通过派生(自己定义了一个init,增加了一条line) class vehichle:#定义一个交通工具的类Country=" ...

最新文章

  1. unzip 压缩包含路径,解压缩覆盖路径下的同名文件
  2. 你可能不知道的Shell
  3. linux out of memory分析(OOM)
  4. INNODB的锁的类型
  5. C++ 高级数据类型(六)—— 自定义数据类型
  6. GC算法 垃圾收集器
  7. 真实赛车3,SPEEDRUSH TV 第3季,第3阶段(第3天),直线加速赛
  8. 百度10.55亿元入股创维酷开,李彦宏要为电视带来AI遥控器
  9. 与Flutter第一次亲密接触-Android 视角
  10. Word2003和2007如何隐藏去掉回车符
  11. 字节码指令之算术指令
  12. 排错解决:etcd节点掉线后(code=exited, status=1/FAILURE),如何加入
  13. 设计模式之Builder模式
  14. 微信小程序地图与位置相关操作
  15. html圆形头像的制作
  16. TinyMCE自定义表情包
  17. js简单实现根据身份证号码识别性别年龄生日
  18. hbuilderx升级3.6.5版本后运行到手机端同步资源失败,未得到同步资源的授权,请停止运行后重新运行,并注意手机上的授权提示
  19. 教学教法改革效果评估的4种方法
  20. YUV420P视频裁剪

热门文章

  1. 多线程编写12306售票系统
  2. 巧用Excel笔画排序,实现计算汉字笔画数
  3. 格调高又小众的EPUB 阅读器(转载)
  4. 下载安装eiigui工具
  5. XYOj2113:找点(区间选点问题)
  6. i.MX RT1064-EVK开发板中基于LPC4322JET100的Freelink调试电路简介
  7. 蓝牙成为物联网市场中的有力竞争者
  8. 阿里云短信类最新版dysmsapi.aliyuncs.com
  9. 为什么计算机集群叫云,为什么叫云计算?
  10. 论文笔记 Weakly Supervised Deep Detection Networks - CVPR 2016