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






































































































  • 相关阅读:
    网络安全分析
    java实现 洛谷 P1464 Function
    java实现 洛谷 P1464 Function
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1014 Cantor表
    java实现 洛谷 P1540 机器
    java实现 洛谷 P1540 机器
  • 原文地址:https://www.cnblogs.com/zsdbk/p/8855631.html
Copyright © 2011-2022 走看看