python's twenty day for me 继承 和 super()方法
super():
在单继承中就是单纯的寻找父类。
在多继承中就是根据子节点所在图 的mro顺序,找寻下一个类。
遇到多继承和super():
对象.方法
1,找到这个对象对应的类。
2,将这个类的所有父类都找到换成一个图。
3,根据图写出广度优先的顺序。
4,再看代码,根据广度优先,来找super().
# 在python 3x 中
class A:
def func(self):
print('A')
class B(A):
def func(self):
super().func()
print('B')
class C(A):
def func(self):
super().func()
print('C')
class D(B,C):
def func(self):
super().func()
print('D') d = D()
d.func()
钻石继承:深度优先。
mro() 子类名.mro()
经典类:在python2x版本才存在,且必须不继承object。python3x中默认继承object所以都是新式类。
经典类:
1,遍历的时候遵循深度优先算法。
2,没有 mro() 方法。
3,没有 super()方法。
新式类:在python2x中需继承object才是新式类。
1,遍历的时候遵循广度优先算法。
2,有 mro() 方法。
3,有super() 方法,但是在python2x中必须传参数(子类名.子类对象名)
# 在python2x中
# coding:utf-8 class A(object):
def func(self):
print('A')
class B(A):
pass
def func(self):
# super(B,self).func()
print('B')
class C(A):
pass
def func(self):
# super(C,self).func()
print('C')
class D(B,C):
pass
def func(self):
# super(D,self).func()
print('D')
d = D()
d.func()
print(D.mro()) # [<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <type 'object'>]
继承与派生:
子类会继承父类的所有方法,前提子类没有相同的方法名。
class Animal:
def __init__(self,name,hp,ad):
self.name = name
self.hp = hp
self.ad = ad
def eat(self):
print('eating in Animal')
self.hp += 20 class Person(Animal):
def __init__(self,name,hp,ad,sex): # 重写
super().__init__(name,hp,ad) # 在单继承中,super负责找到当前类所在的父类,在这个时候不需要再手动传self
self.sex = sex # 派生属性
self.money = 100
def attack(self,dog): # 派生方法
print('%s攻击了%s' % (self.name,dog.name))
def eat(self): # 重写
super().eat() # 在类内 使用super()方法着父类方法
print('eating in Person')
self.money -= 50 class Dog(Animal):
def __init__(self,name,hp,ad,kind):
super().__init__(name,hp,ad)
self.kind = kind # 派生属性
def bite(self,person): # 派生属性
person.hp -= self.ad alex = Person('alex',100,10,'female')
print(alex.__dict__) # 父类有eat 子类没有。
# alex.eat() # 找父类的。
# alex.eat() #子类有eat() 不管有没有都会先找子类的。
# 当子类中有,但是想要调用父类的方法。
# Animal.eat(alex) # 指名道姓
# super(Person,alex).eat() #super(子类名,子类对象名) 方法。
多继承:
新式类,多继承,寻找名字的顺序,遵循广度优先。
class A:
def func(self):
print('A')
class B(A):
def func(self):
super().func()
print('B')
class C(A):
def func(self):
super().func()
print('C')
class D(B,C):
def func(self):
super().func()
print('D') d = D()
d.func()
python's twenty day for me 继承 和 super()方法的更多相关文章
- [python] 在 python2和3中关于类继承的 super方法简要说明
下面举一个例子,同样的代码使用 python2 和 python3 写的,大家注意两段程序中红色加粗的部分: python2的类继承使用super方法: #-*- coding:utf-8 -*- ' ...
- python基础知识09-继承,多继承和魔术方法
1.继承 class Father: def init(self,age,sex): self.age = age self.sex = sex class Son(Father): 类名后面写括号, ...
- sqlalchemy mark-deleted 和 python 多继承下的方法解析顺序 MRO
sqlalchemy mark-deleted 和 python 多继承下的方法解析顺序 MRO 今天在弄一个 sqlalchemy 的数据库基类的时候,遇到了跟多继承相关的一个小问题,因此顺便看了一 ...
- Python面向对象篇(2)-继承
在发表本篇随笔的时候,距离上一次发已经有一个多月了,很多朋友私信我为什么不持续更新了,在这里先跟大家说声抱歉.因为年底的工作较为繁重,实在分不出精力,更重要的也是在思考后面进阶的部分要按怎样的顺序写, ...
- python面向对象学习(四)继承
目录 1. 单继承 1.1 继承的概念.语法和特点 1.2 方法的重写 1.3 父类的 私有属性 和 私有方法 2. 多继承 2.1 多继承的使用注意事项 2.2 新式类与旧式(经典)类 1. 单继承 ...
- python 全栈开发,Day20(object类,继承与派生,super方法,钻石继承)
先来讲一个例子 老师有生日,怎么组合呢? class Birthday: # 生日 def __init__(self,year,month,day): self.year = year self.m ...
- 《Python》 面向对象三大特性之继承
一.继承大纲: 继承和抽象(两个概念) 1.单继承: 语法: 父类.基类.超类 子类.派生类 继承与重用:子类可以使用父类中的名字(变量和方法) 继承与派生:子类在父类的基础上又新创建了自己需要的方法 ...
- Python 学习笔记(十五)Python类拓展(一)继承
继承 继承(Inheritance):是面向对象软件技术当中的一个概念.如果一个类别A "继承自" 另一个类B,就把这个A称为“B的子类”,而把B称为“A的父类”,也可以称“B是A ...
- 【我要学python】面对对象编程之继承和多态
class animal(object): def run(): print('animal is running...') class dog(animal): def run(self): pri ...
随机推荐
- poj3517约瑟夫问题
直接套公式+ 假设除去第k个人. 0, 1, 2, 3, ..., k-2, k-1, k, ..., n-1 //original sequence (1) 0, 1, 2, 3, ..., k-2 ...
- tracecaller.cs
#region Utility #if TRACE private const string Traceformat = "\"{0}\",\"{1:yyyy- ...
- springboot打Jar包和War包
一:打JAR包 在工程的pom.xml中添加以下依赖 <build> <plugins> <plugin> <groupId>org.springfra ...
- idea maven打包 install 报错The packaging for this project did not assign a file to the build artifact
如题,这其实是个低级错误,这个错的意思是,找不到这个插件的包. 原因很简单,不是找不到这个打包插件,而是自己的项目没有从maven仓库里加载这个包到项目里,因此会找不到. 看一下问什么会报这个错: 大 ...
- python tesseract-ocr 基础验证码识别功能(Windows)
一.环境 windows 7 x64 Python 3 + 二.安装 1.tesseract-ocr安装 http://digi.bib.uni-mannheim.de/tesseract/ 2.py ...
- MS Project 如何删除前置任务
- jQuery 图片自动播放
var imgArray = new Array("images/1.jpg", "images/2.jpg","images/3.jpg" ...
- PostgreSQL日志配置记录
日志审计 审计是值记录用户的登陆退出以及登陆后在数据库里的行为操作,可以根据安全等级不一样设置不一样级别的审计, 此处涉及的参数文件有: logging_collector --是否开启日 ...
- 《Drools7.0.0.Final规则引擎教程》第4章 4.3 定时器
定时器 规则用基于 interval(间隔)和cron的定时器(timer),替代了被标注过时的duration 属性.timer属性的使用示例: timer ( int: <initial d ...
- UltraEdit编码设置
1.查看ue文件编码 一直苦于无法判断文件的编码类型,现在发现一个方法,就是用强大的UltraEdit-32软件: UltraEdit-32的状态栏可以显示文件的编码类型,详细情况如下: ANSCI- ...