• day 20 object类 + 继承于派生 + 钻石继承问题 + 钻石继承的深度优先算法(python3新式类,python2经典类)


    Object  类:

    class A:

      '''

      这是一个类

      '''

    a = class()

    print(A.__dict__)   #魔术方法,双下方法

    创建一个空对象:调用了  __init__()方法,调用了吗?调用了

    将初始化后的对象返回调用处

    class Animal:
        def __init__(self,name,hp,ad):
            self.name = name
            self.hp = hp
            self.ad = ad
    
        def eat(self):
            print('%s in eating pear ' %self.name)
    
    
    class Person(Animal):
        def __init__(self,name,hp,ad,sex):
            super(Person,self).__init__(name,hp,ad)
            self.sex = sex
        def eat(self):
            # super().eat()
            print('%s in eating apples' %self.name)
    
    class Dog(Animal):
        def __init__(self,name,hp,ad,kind):
            super(Dog,self).__init__(name,hp,ad)
            self.kind = kind
    
        def eat(self):
            # super().eat()
            print('%s in eating ' %self.name)
    
    
    
    alex = Person('不存在',100,10,'不存在')
    xiaobai = Dog('小白',100,1,'牛奶甜')
    alex.eat()
    xiaobai.eat()
    父类有eat,子类没有
    alex.eat() 找父类的
    子类中有,如果没有supper()的话,不会去父类中寻找
    当子类中有,我还想要调父类的方法 肿么办? 嗯哼
    哈哈哈哈 有两种方法:
    在内部
    1.类名.方法名(参数) 需要先进行实例化
    2.实例化对象之后 super().方法名()

    在外部:
    第二种方式 supper()里面必须加参数




    钻石继承问题:
      在python3环境中。只有新式类:新式类单继承中就是单纯的寻找父类,再多继承中就是根据子节点所在图的mro顺序寻找下一个类:
    遇到多继承和supper() 注意:python3中的新式类都继承object类
      对象,方法
        1.找到这个对象对应的类
        2.将这个类的父类都画到一个图
        3.根据这个图,写出广度优先的顺序
        4.再看代码,看代码的时候要根据广度优先的顺序图来找相应的supper
    PS:一句话总结:在python3中 新式类 遵循:广度优先遍历算法

      在python2环境中。主要是经典类:
        1.经典类,必须不继承object
        2.没有mro方法
        3.经典类中没有supper
        4.遍历的时候需要遵循深度优先算法


       在python2环境中。可以有新式类:
        1.遍历的时候遵循广度优先算法
        2.在新式类中有mro方法
        3.有supper方法,但是在2.x版本的解释器中,必须传参数(子类名,子类对象) #子类对象就是实例化对象






































































































  • 相关阅读:
    Thinkphp的 is null 查询条件是什么,以及exp表达式如何使用
    thinkphp5多文件上传如何实现
    如何动态改变audio的播放的src
    js插件---10个免费开源的JS音乐播放器插件
    html5页面怎么播放音频和视频
    Thinkphp5图片上传正常,音频和视频上传失败的原因及解决
    leetcode
    HTML5 画一张图
    Linux内核和根文件系统引导加载程序
    [dp] hdu 4472 Count
  • 原文地址:https://www.cnblogs.com/zsdbk/p/8855631.html
Copyright © 2020-2023  润新知