• python 继承


    一、简介

    1、作用

    简化代码

    2、分类

    一个父类可以被多个多个子类继承

    一个子类可以继承多个父类---python独有

    3、新式类和经典类

    python3中,只含义新式类,新式类默认继承Object

    python2.7中含义经典类和新式类,新式类需要继承Object

    4、方法

    类名.__base__查看该类的继承顺序

    类.mro(),返回类的调用顺序

    class A:
        print('A')
    
    
    class B(A):
        print('B')
    
    
    class C(A):
        print('C')
    
    
    class D(B, C):
        print('D')
    
    
    print(D.__bases__)      # (<class '__main__.B'>, <class '__main__.C'>)
    print(D.mro())      # [<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>]

    二、单继承

    1、派生

    派生属性:在子类中,创建父类中没有的属性

    派生方法:在子类中,创建父类中没有的方法

    2、顺序

    1)子类对象的调用顺序

    子类属性、方法,若没有到父类的属性、方法,若没有到Object,若没有,则报错

    2)调用父类

    1)通过子类对象调用,若子类有同名方法,会调用子类的方法

    2)通过父类名直接调用父类

    3)使用super(类名, 已定义的对象名).类方法名

    3、用父类的属性、方法

    1)父类名.__init__(self, 父类的其它属性)

    2)super().__init__(父类的其它属性)

    4、super()

    super()方法只在python3中存在

    在类内部可以不写()内的类名和对象名

    super()的本质:不是单纯找父类,而是根据调用者的节点位置的广度优先顺序来的

    class Person:
        def __init__(self, name, sex, age):
            self.name = name
            self.sex = sex
            self.age = age
    
        def introduce(self):
            print('父类方法', self.name)
    
    
    class Student(Person):
        def __init__(self, name, sex, age, grade):
            Person.__init__(self, name, sex, age)       # 通过父类直接调用__init__方法
            self.grade = grade      # 派生属性
    
        def gr(self):       # 派生方法
            print(self.grade)
    
    
    class Worker(Person):
        def __init__(self, name, sex, age, money):
            super(Worker, self).__init__(name, sex, age)    # Worker, self 可以不写
            self.money = money      # 派生属性
    
        def make(self):     # 派生方法
            print(self.money)
    
    
    s1 = Student('tom', 'man', 24, 99)
    s1.gr()     # 99
    print(s1.name)      # tom
    s1.introduce()      # 父类方法 tom, 调用父类方法,若子类有同名方法,会调用子类的方法
    Person.introduce(s1)    # 调用父类方法
    super(Student, s1).introduce()  # 调用父类方法

    三、多继承

    1、一个子类继承多个父类

    2、调用顺序

    默认是就近原则

    新式类:广度优先

    经典类:深度优先

    3、新式类

    1)钻石继承

    class D:
        print('D')
    
    
    class B(D):
        print('B')
        
        
    class C(D):
        print('D')
        
        
    class A(B, C):
        print('A')

    2)

    3)

     4、经典类

    深度优先,一条路走到黑

     ps:组合和继承怎么抉择?

      组合:什么有什么

      继承:什么是什么

  • 相关阅读:
    Advanced Configuration Tricks
    Reviewing the Blog Module
    Editing and Deleting Data
    Making Use of Forms and Fieldsets
    Understanding the Router
    SQL Abstraction and Object Hydration
    Preparing for Different Databases
    Java学习理解路线图
    Openstack学习历程_1_视频
    CentOS安装Nginx负载
  • 原文地址:https://www.cnblogs.com/wt7018/p/10923175.html
Copyright © 2020-2023  润新知