zoukankan      html  css  js  c++  java
  • python面向对象(类的继承)

    一. 继承的初识

    在python3中 所有的类都继承自object

    class ParentClass1: pass
    class ParentClass2: pass
    
    class ChildClass(ParentClass1):pass     #单继承
    class ChildClass1(ParentClass1,ParentClass2):pass     #多继承
    
    print(ParentClass1.__base__)
    print(ChildClass.__base__)       #会显示该类的一个父类
    print(ChildClass1.__base__)
    print(ChildClass.__bases__)
    print(ChildClass1.__bases__)    #会显示该类的所有父类

    二. 人狗大战

    class Animal:
        def __init__(self,name,aggr,hp):
            self.name = name
            self.aggr = aggr
            self.hp = hp
        def eat(self):
            print('in Animal')
    
    class Person(Animal):
        def __init__(self,name,sex,aggr,hp):
            self.sex = sex
            # Animal.__init__(self,name,aggr,hp)
            super().__init__(name,aggr,hp)
        def attack(self,dog):
            print('%s打了%s'%(self.name,dog.name))
            dog.hp -= self.aggr
            print(dog.hp)
        def eat(self):
            print('in Person')
            # Animal.eat(self)
            # super().eat()
    
    class Dog(Animal):
        def __init__(self,name,kind,aggr,hp):
            self.sex = kind
            # Animal.__init__(self, name, aggr, hp)
            super().__init__(name,aggr,hp)
        def bite(self, person):
            print('%s咬了%s'%(self.name, person.name))
            person.hp -= self.aggr
            print(person.hp)
    
    alex = Person('alex','felame',1,250)
    hei = Dog('小黑','teddy',260,10000)
    
    alex.attack(hei)
    hei.bite(alex)
    # alex.eat()
    Person.eat(alex)
    Animal.eat(alex)
    super(Person,alex).eat()

    三. 单继承

    不要发生循环继承
    依赖倒置原则 :
    高层模块不应该依赖低层模块

    class A:
        def wahaha(self):print('in A')
    
    class B(A):
        def wahaha(self):print('in B')
    
    class C(B):
        def wahaha(self):print('in C')
    
    class D(C):
        def wahaha(self):print('in D')
    
    d = D()
    d.wahaha()

    三. 多继承及钻石继承

    python3中的所有类 都默认继承object

    如果一个类 继承了object 这个类就被称为新式类
    没有继承object类 就被称为经典类

    深度优先 广度优先 都是一种遍历算法,把这个图中所有的项都走一遍,且不会重复

    经典类 遵循 深度优先算法 且没有mro方法 python2
    新式类 遵循 广度优先算法 有mro方法 py2 py3
    py3 super
    单继承中 super就是找父类
    多继承 super寻找的轨迹是根据mro(广度优先)顺序的

    class A:
        def wangwang(self):
            print('in A')
    class B(A):
        def wangwang(self):
            super().wangwang()    # 'in C '
            print('in B')
    class C(A):
        def wangwang(self):
            print('in C')
    class D(B,C):pass
    
    d = D()
    d.wangwang()
  • 相关阅读:
    centos 挂载u盘
    如何将网站部署到tomcat根目录下
    seo工具
    mysql 1045 access denied for user********
    div 自适应宽度
    mysql 日志提示 is marked as crashed and should be repaired
    css overflow:hidden无效解决办法
    java 调用 .net webservice
    Java开发笔记(十五)短路逻辑运算的优势
    Java开发笔记(十四)几种运算符的优先级顺序
  • 原文地址:https://www.cnblogs.com/zhuzhaoyang/p/8524905.html
Copyright © 2011-2022 走看看