zoukankan      html  css  js  c++  java
  • 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版本的解释器中,必须传参数(子类名,子类对象) #子类对象就是实例化对象






































































































  • 相关阅读:
    【leetcode】Spiral Matrix
    【leetcode】Permutations
    【leetcode】Search Insert Position
    【leetcode】Search for a Range
    文件名对目标文件夹可能过长
    协同过滤和简单SVD优化
    奇异值分解(SVD)和简单图像压缩
    PCA数据降维
    FP-growth高效频繁项集发现
    关联挖掘和Aprioir算法
  • 原文地址:https://www.cnblogs.com/zsdbk/p/8855631.html
Copyright © 2011-2022 走看看