多继承

多继承

社会主义新天地 提交于 2019-12-04 21:21:11
钻石继承法 A D继承的B和C,B和C继承的A #继承 单继承==减少了代码的重复性#继承表达的是一种 子类是父类的关系#钻石继承# class A:# def func(self):print("A")# class B(A):# def func(self): print("B")# class C(A):# def func(self): print("C")# class D(B,C):#从做到右一个一个找,如果左边没有的话,不会去左边的上一级去找,会先看右边有没有,右边没有的话,会去上一级找# pass# d=D()# d.func()#六边形继承# class F:# def func(self):# print("F")# class A(F):# def func(self):print("A")# class B(A):# def func(self): print("B")# class E(F):# pass# class C(E):# def func(self): print("C")# class D(B,C):#从做到右一个一个找,如果左边没有的话,不会去左边的上一级去找,会先看右边有没有,右边没有的话,会去上一级找# pass# d=D()# print(D.mro())#mro方法可以查他的继承方式,mor只在新式类中使用#新式类的继承方式

接口类的多继承

送分小仙女□ 提交于 2019-12-04 21:21:08
#tiger 走路 游泳#swan 走路 游泳 飞#oldying 走路 飞、import abcfrom abc import ABCMetaclass Swam_animal(metaclass=ABCMeta): @abc.abstractmethod def swam(self): passclass Fly_animal(metaclass=ABCMeta): @abc.abstractmethod def fly(self): passclass Walk_animal(metaclass=ABCMeta): @abc.abstractmethod def walk(self): passclass Tiger(Walk_animal,Swam_animal): passclass oldying(Fly_animal,Walk_animal): passclass swan(Walk_animal,Swam_animal,Fly_animal): pass#接口类的原则 接口隔离原则,应给有多个专用的接口,不使用单一的接口,客户端不依赖于那些不需要的接口#抽象类只能被继承,不能被实例化#抽象类一般都是单继承,实现的功能都是一样的,所以在父类中可以有一些简单的父类实现#多继承的情况,由于功能比较 复杂,所以不容易抽象出相同的功能的具体的实现在写在父类中#抽象类和接口类

python_面向对象——多继承

寵の児 提交于 2019-12-04 19:58:08
1.多继承 class Shenxian: def fly(self): print('神仙会飞~') class Monkey: def eat_peach(self): print('猴子喜欢吃桃子') # 继承多个类 class MongkeyKing(Shenxian,Monkey): def play_stick(self): print('孙悟空玩金箍棒') m = MongkeyKing() # 子类对象可以执行多个父类中的方法 m.play_stick() m.fly() m.eat_peach() 2.多继承顺序(按顺序从左到右继承) class Shenxian: def fly(self): print('神仙会飞~') def fight(self): print('神仙打架') class Monkey: def eat_peach(self): print('猴子喜欢吃桃子') def fight(self): print('猴子打架') # 当多继承父类中同时有两个重名方法时,先继承左边父类中发方法(继承顺序从左到右) class MongkeyKing(Shenxian,Monkey): def play_stick(self): print('孙悟空玩金箍棒') m = MongkeyKing() m.fight() 3. 来源: https:/

pyhton 多继承的执行顺序

六眼飞鱼酱① 提交于 2019-12-04 08:23:05
比如举个例子: 1 class A: 2 def __init__(self): 3 print("Enter A") 4 print("Leave A") 5 6 class B(A): 7 def __init__(self): 8 print("Enter B") 9 super(B, self).__init__() 10 print("Leave B") 11 12 class C(A): 13 def __init__(self): 14 print("Enter C") 15 super(C, self).__init__() 16 print("Leave C") 17 18 class D(A): 19 def __init__(self): 20 print("Enter D") 21 super(D, self).__init__() 22 print("Leave D") 23 24 class E(B, C, D): 25 def __init__(self): 26 print("Enter E") 27 super(E, self).__init__() 28 print("Leave E") 29 30 E() 运行结果是: Enter E Enter B Enter C Enter D Enter A Lever A Lever D Lever C

super()方法详解

心已入冬 提交于 2019-12-04 08:14:20
super()方法详解 一、单独调用父类的方法 需求:编写一个类,然后再写一个子类进行继承,使用子类去调用父类的方法1。 使用方法1打印: 胖子老板,来包槟榔。 那么先写一个胖子老板的父类,执行一下: class FatFather(object): def __init__(self, name): print('FatFather的init开始被调用') self.name = name print('FatFather的name是%s' % self.name) print('FatFather的init调用结束') def main(): ff = FatFather("胖子老板的父亲") 运行一下这个胖子老板父类的构造方法__init__ 如下: if __name__ == "__main__": main() FatFather的init开始被调用 FatFather的name是胖子老板的父亲 FatFather的init调用结束 好了,那么下面来写一个子类,也就是胖子老板类,继承上面的类 # 胖子老板的父类 class FatFather(object): def __init__(self, name): print('FatFather的init开始被调用') self.name = name print('调用FatFather类的name是%s' %

Python继承、多继承、魔术方法

て烟熏妆下的殇ゞ 提交于 2019-12-02 19:04:58
继承和多继承的概念和使用 super的用法 __str__   __repr__   __call__ 多继承方法解析顺序和Mix-in开发模式 魔术方法原理和作用 继承 定义类的时候,在类名后面的括号里填继承的类的类名 顶级基类object __bases__:查看类的直接父类 继承搜索 访问类的属性或方法 --> 如果找不到,转到其父类中查找 --> 如果再找不到,转到其父类的父类中查找 多继承 当继承多个父类时,如果父类中有相同的方法,那么子类会优先使用最先被继承的方法 重写 当子类继承父类之后,如果子类不想使用父类的方法,可以通过重写来覆盖父类的方法 super用法 重写父类方法之后,又需要使用父类的方法 方法一:父类名.方法名 方法二:super 函数可以调用父类的方法 类在生成时会自动生成方法解析顺序 可以通过调用类的__mro__属性或者mro方法来查看类的继承关系 object是所有类的父类 Mix - in 设计模式 由多个模块组成一个整体 最好,多继承就一层,且是最后一层 魔术方法 一种特殊的方法,前后有两个下划线 特点:不需要人工调用,在特定的时候自动执行 魔术方法之运算方法 不同运算符调用不同的魔术方法(了解即可) __add__ # x+y    __sub__ # x-y   __mul__ # x*y   __mod__ # x%y __iadd__

Python学习记录8-继承2

大憨熊 提交于 2019-12-01 23:51:33
继承 单继承和多继承 单继承:每个类只能继承一个类 多继承:每个类允许继承多个类 >>> class A(): pass >>> class B(A): pass >>> class C(B,A): pass >>> print(A.__mro__) >>> print(B.__mro__) 输出: (<class '__main__.A'>, <class 'object'>) (<class '__main__.B'>, <class '__main__.A'>, <class 'object'>) # 子类可以直接拥有父类的属性和方法,私有属性和方法除外 >>> class Fish(): def __init__(self, name): self.name = name def swim(self): print('{} can swimming......'.format(self.name)) >>> class Bird(): def __init__(self, name): self.name = name def fly(self): print('{} can fly......'.format(self.name)) >>> class Person(): def __init__(self, name): self.name = name def

05 多继承、object类

旧街凉风 提交于 2019-12-01 22:44:28
多继承 Python中一个类可以继承多个父类,并且获得全部父类的属性和方法。 class A: def demo(self): print("demo") class B: def test(self): print("test") class C(A, B): pass c = C() c.demo() c.test()   运行结果: E:\python3\python3.exe F:/PycharmProjects/project3-class/xh_14_多继承.py demo test Process finished with exit code 0     多继承父类方法冲突 在开发中, 如果父类之间存在同名的属性和方法,应尽量避免使用多继承。 在python中,MRO(method resolution order 方法搜索规则)用来解决方法优先执行的问题,它是每个类的内置函数 可以使用 print(类名.__mro__)来查看在存在同名方法时按何种优先级执行: (<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)   如上表示:如C类中存在这个方法,则执行C类中的方法,否则按顺序(A类,B类,Object类)来最优执行。 object类

多继承 查看一个类执行顺序

一个人想着一个人 提交于 2019-12-01 17:33:19
在python中针对类提供了一个内置属性,__mro__ 可以查看方法搜索顺序 MRO 是method resolution order ,主要用于在多继承时判断方法、属性的调用路径 class A(object): def demo(self): print('A---demo ') def test(self): print('A---test') class B(object): def demo(self): print('B---demo ') def test(self): print('B---test') class C(A,B): pass print(C.__mro__) 1、在搜索方法时,是按照输出结果,从左向右的顺序查找的 2、如果在当前类中 找到方法就直接执行,不在搜索 3、如果没有找到就查找下一个类中是否有对应的方法,如果找到就直接执行,不在继续搜续哦 4、如果找到最后一个类还没有找到方法,程序报错 来源: https://www.cnblogs.com/liangliangzz/p/11695939.html

day21 继承

你说的曾经没有我的故事 提交于 2019-12-01 04:59:46
目录 day21 继承 今日内容 昨日回顾 今日内容详细 一对多的组合关系 继承(实现)关系 day21 继承 今日内容 一对多的组合关系 继承(实现)关系 单继承 多继承 super 昨日回顾 OOA、OOD和OOP 类之间的关系 依赖(关联)关系 组合(聚合)关系 继承(实现)关系 依赖(关联)关系 将一个类的对象或类名传给另一个类的方法使用 删除示例属性的方法 delattr del 对象名.属性名 组合(聚合)关系 将一个类的对象整体作为另一个类的属性 今日内容详细 一对多的组合关系 同一对一的组合关系类似,我们可以将多个类的对象封装为另一个类的属性,具体示例为: # 有一个男孩类和一个女孩类,男孩类中包含多个女孩类的对象 class Boy: def __init__(self, name): self.name = name self.girl_f = [] def ba_mei(self, girl): self.girl_f.append(girl) def happy(self): for i in self.girl_f: i.play() class Girl: def __init__(self, name): self.name = name def play(self): print(f'{self.name}陪你一起玩~o(=•ェ•=)m')