zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    5分钟快速入门angular2.0
    手把手教你书写对话框(构造函数&原型模式)
    JavaScript函数
    Javascript 循环
    javascript
    vue2.0 axios post请求传参问题(ajax请求)
    19.8.13第二天
    19.8.12 第一天的学习
    C#设计模式--简单工厂模式
    C#设计模式--单例模式
  • 原文地址:https://www.cnblogs.com/yuanji2018/p/9148053.html
Copyright © 2011-2022 走看看