python-类的继承

1 所用的类都可以被继承 

2 没有继承其他类的类必然有一个父类(object)

3子类可以拥有父类的__init__里的类容

派生

子类除了父类的一些属性,还会有自己的属性和方法,这些就叫派生

如何使用代码实现

class Animal:
    def __init__(self,name,attack,hp):
        self.name=name
        self.attack=attack
        self.hp=hp
    def defecate(self):
        print('%s屁股一撅,要拉了' %self.name)
    pass

class Human(Animal):
    def __init__(self,name,attack,hp,intelli):
        Animal.__init__(self,name,attack,hp)
        self.intelligence=intelli
    def think(self):
        print('who am i,where am i from?')

    def defecate(self):
        print('找了个厕所,脱下裤子')
        Animal.defecate(self)

    pass

class dog(Animal):
    def __init__(self,name,attack,hp,kind):
        Animal.__init__(self,name,attack,hp)
        self.kind=kind
    def estrus(self):
        print('把异性狗按倒在地')
    pass

  

多继承的顺序   ,遵循广度优先原理

就是会一个一个找过去,哪种顺序能一个不漏的找到,就用哪种顺序

第一个图的顺序 D,B,A,C,E,X

第二个图 D,B,A,X,C,E,W

查看一个类的继承顺序代码比如D : D.mro()

这是新式类的顺序 

那么什么是新式类 

继承object的类都是新式类,python3都是新式类 

而python2里面既有新式类也有经典类,经典类不同在于,继承顺序不同(深度优先),经典类也没有mro和super

super()是什么作用,怎么用?

super() 函数是用于调用父类(超类)的一个方法。

super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。

MRO 就是类的方法解析顺序表, 其实也就是继承父类方法时的顺序表。

http://www.runoob.com/python/python-func-super.html

 

原文地址:https://www.cnblogs.com/yuanji2018/p/9148053.html